8
votes

Pouvez-vous passer un "type" comme argument?

Je veux faire quelque chose comme ce qui suit dans vb.net est possible? XXX


2 commentaires

Pourquoi ne jetez-vous pas votre objet avant l'envoyer à la fonction de tâche?


N'est-ce pas une solution de contournement évidente ?!


5 Réponses :


15
votes

oui. Il y a système.type. Vous pouvez réellement vouloir faire un générique cependant.

Function SomeFunction(Of T)(obj As Object) As T
    '' Magic
End Function


5 commentaires

Oh Doh. Je suis tellement habitué à c # ces jours-ci.


Cela peut sembler évident, mais que mettons-nous à la place de la magie? Dans mon cas, je veux passer un type d'exception à une fonction, sans initialiser l'exception (qui sera initié à l'intérieur de la fonction). Je ne sais pas à l'avance à quel exceptype mon système.Exception sera exceptionnel.


@Ama ce que vous voulez faire.


Je ne comprends pas quelle est votre fonction: ce qu'elle est censée revenir, et comment puis-je spécifier T. J'ai essayé le sugestion de Fredou qui est à retour obj , mais je ne peux même pas utiliser la fonction . Je reçois un "paramètre de type" t 'ne peut pas être déduit. "


@Ama - Voir ma réponse ci-dessous ( Stackoverflow.com/a/63427203/9792594 ), j'espère que cela explique comment appeler un fonction générique?



2
votes

Vous voulez utiliser le

function task(of myType)(value as myType) as MyType
   ''stuff
   return value
end function


0 commentaires

0
votes

Oui, cependant, en fonction de vos besoins, vous pouvez utiliser CTYPE pour effectuer n'importe quel type de coulée / conversion. CTYPE fonctionnera tant qu'il existe une conversion de type valide, tandis que DirectCast nécessite que valeur soit du type totype .


0 commentaires

3
votes

Superbe réponse - Voici une fonction générique pour faire la même chose: xxx

appelez-le comme suit: xxx


0 commentaires

0
votes

Je devais faire quelque chose de similaire aujourd'hui (remplir essentiellement le '' Magic à partir de la réponse acceptée): XXX


0 commentaires