Comment dynamiquement cast d'un objet de type string vers un objet de type T
J'ai de ce document XML
<AdditionalParameters>
<PublishToPdf Type ="System.Boolean">False</PublishToPdf>
</AdditionalParameters>
dans mon code et je suis en train de construire un tableau d'arguments contenant le <PublishToPdf>
nœud.
object test = (object) ((typeof(publishNode.Attributes["Type"].value)) publishNode.InnerText);
Cela rompt au moment de la compilation de cours. Je ne peux pas comprendre comment lancer le publishNode.InnerText('false')
à l'exécution de l'objet défini par le type spécifié dans le fichier XML et de le stocker dans un objet (qui permettront de conserver le type).
OriginalL'auteur LolaRun | 2009-09-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Convert.ChangeType
:Oui, et pour obtenir destinationType, l'utilisation de la var destinationType = Type.Parse(publishNode.Attributs["Type"].valeur);
Type.Parse() ne semblent pas exister. Vouliez-vous dire Type de.GetType() par hasard?
OriginalL'auteur Thomas Levesque
Vous ne pouvez pas faire exactement ce que vous essayez de faire. Tout d'abord, le
typeof
mot-clé ne permettent pas une évaluation dynamique lors de l'exécution. Il y a moyen de ce faire à l'aide de la réflexion, avec des méthodes commeType.GetType(string)
, mais leType
objets renvoyés à partir de ces réfléchissant fonctions ne peuvent pas être utilisés pour des opérations comme la coulée.Ce que vous devez faire est de fournir un moyen de conversion de votre type de vers et à partir d'une représentation sous forme de chaîne. Il n'y a pas de conversion automatique de tout type arbitraire. Pour votre exemple, vous pouvez utiliser
bool.Parse
oubool.TryParse
, mais ceux-ci sont spécifiques à labool
type. Il existe des méthodes similaires sur la plupart des types primitifs.OriginalL'auteur Adam Robinson
La solution la plus simple, en supposant qu'il existe un nombre limité de types possibles;
Ainsi, la var est juste pour rendre le code plus court, u peut utiliser string, string, object pour ces trois à la place. Et, comme je l'ai dit, si vous avez seulement besoin de l'appui d'un nombre limité de types, ce serait beau travail. Si non, alors vous avez raison de dire que c'est pas pratique.
Avec C# 6 vous pouvez utiliser
case nameof(System.Guid):
par exemple. Pas besoin de const chaînes plus. nameof est temps de compilation généré.OriginalL'auteur Digitalex