8
votes

Comment lancer de manière dynamique un objet de type chaîne à un objet de type T

J'ai ce document XML

object test = (object) ((typeof(publishNode.Attributes["Type"].value)) publishNode.InnerText);


0 commentaires

3 Réponses :


2
votes

Vous ne pouvez pas faire exactement ce que vous essayez de faire. Tout d'abord, le mot-clé de type n'est pas autorisé à une évaluation dynamique au moment de l'exécution. Il existe des moyens par lesquels le faire à l'aide de la réflexion, avec des méthodes telles que type.getype (string) , mais le type Les objets renvoyés à partir de ces fonctions réfléchissantes ne peuvent pas être utilisés pour opérations telles que la coulée.

Ce que vous devez faire est de fournir un moyen de convertir votre type à une représentation à chaîne. Il n'y a pas de conversion automatique d'un type arbitraire. Pour votre exemple, vous pouvez utiliser bool.parse ou bool.trypsarse , mais ceux-ci sont spécifiques au type bool . Il existe des méthodes similaires sur la plupart des types primitifs.


0 commentaires

24
votes

Vous pouvez utiliser convert.changetype : xxx


2 commentaires

Oui, et pour obtenir DestinationType, utilisez Varnat DestinatType = Type.Parse (PublishNode.ATtributes ["Type"]. Valeur);


Type.parrse () ne semble pas exister. Avez-vous voulu dire type.gettype () par hasardype ()?



2
votes

La solution simple, en supposant qu'il existe un nombre limité de types possibles; xxx


3 commentaires

Je travaille avec .NET Framework 2.0. et je n'ai pas var. Et la solution que vous avez suggérée est l'usine mettant en œuvre la création de vraisures de tous types, qui sont innombrables. Mais merci de votre aide quand même.


Eh bien, le var était juste pour rendre le code plus court, vous pouvez utiliser une chaîne, une chaîne, un objet pour ces trois à la place. Et, comme je l'ai dit, si vous n'avez besoin que de supporter un nombre limité de types, cela fonctionnerait bien. Sinon, alors vous avez raison de dire que ce n'est pas pratique.


Avec C # 6, vous pouvez utiliser Case Nameof (System.Guid): Par exemple. Pas besoin de cordes constantes plus. Nomof est compilé le temps généré.