10
votes

Tapez le casting d'un objet à l'aide d'un objet "Type" en C #

Celui-ci s'est avéré être un peu délicat pour moi jusqu'à présent. Je me demande s'il est possible de taper de jeter un objet à l'aide d'un objet System.Type.

J'ai illustré ci-dessous ce que je veux dire: xxx

Ce qui précède est un générique interface qui est la raison pour laquelle j'utilise "objet" pour les types.


0 commentaires

5 Réponses :


8
votes

La manière typique de le faire est d'utiliser des génériques, comme: xxx

Comme vous l'avez mentionné dans votre commentaire ci-dessous, les génériques sont très similaires aux modèles C ++. Vous pouvez trouver le Documentation MSDN pour les génériques ici et l'article " Différences entre les modèles C ++ et les génériques C # (Guide de programmation C #) " probablement être utile.

Enfin, je pourrais être mal compris ce que vous voulez faire à l'intérieur du corps de la méthode: je ne sais pas comment vous transformerez un type arbitraire t dans un autre Type arbitraire T2 , sauf si vous spécifiez des contraintes sur les types génériques. Par exemple, vous devrez peut-être spécifier qu'ils doivent tous deux mettre en œuvre une interface. Contraintes sur les paramètres de type (Guide de programmation C #) explique comment faire cela En C #.

EDIT : Compte tenu de votre question révisée, je pense Cette réponse de Marco M. est correcte (c'est-à-dire, je pense que vous devriez utiliser le convertisseur délégué où Vous essayez actuellement d'utiliser votre IDataDapter interface.)


1 commentaires

Je n'ai pas fait effacer dans l'exemple, mais les deux méthodes sont dans une interface idatadapter.



2
votes

Ce qui précède est une interface générique qui est la raison pour laquelle j'utilise "objet" pour les types

n'aurait pas plus de sens d'utiliser une interface générique réelle: xxx


4 commentaires

Celles-ci ressemblent à des modèles de C ++ - ne les ont pas encore couverts dans C #. Merci!


Je suis un peu confus quant à la façon dont vous utilisez "U" en dehors du générique. Quelle portée avez-vous donné?


@Kelix: "U" serait votre type actuel, vous n'utiliseriez pas vraiment "u" comme ça. Regardez la réponse de @ Jeff et remarquez que son T2 est remplacé par "chaîne" et correspond de la même manière.


Je pourrais aussi utiliser un "var" et ne pas être jeté du tout si je ne me trompe pas?



3
votes

Vous ferez mieux d'utiliser quelque chose comme le convertisseur délégué xxx

pour un exemple, consultez msdn xxx


1 commentaires

Comment cela permet-il d'obtenir un objet de type d'un autre objet? L'entrée et la sortie ne sont pas des objets et doivent être connus au moment de la compilation.



7
votes

Pourquoi le rendre compliqué, quand vous êtes sûr qu'il renvoie une chaîne?

var output = Convert.ChangeType(t.Transform(input), t.GetOutputType());


2 commentaires

Parce que l'exemple est une interface - mise à jour maintenant.


Je vais frapper 1 pour ça! J'aime l'idée de convert.changetype () et fournissant le type de l'objet sous forme de 2e argument afin de pouvoir modifier ce type. Je travaille sur une autre bibliothèque et j'espère que cela sauvera ma nuit. Merci@shahkalpesh



2
votes

C'est ce que je suis allé avec (basé sur la structure iénumérable): xxx


0 commentaires