56 votes

C# : Analyse dynamique à partir de System.Type

J'ai un Type, une Chaîne et un Objet.

Existe-t-il un moyen d'appeler la méthode d'analyse ou de conversion pour ce type de chaîne de façon dynamique ?

En gros, comment supprimer les instructions if dans cette logique ?

object value = new object();    
String myString = "something";
Type propType = p.PropertyType;

if(propType == Type.GetType("DateTime"))
{
    value = DateTime.Parse(myString);
}

if (propType == Type.GetType("int"))
{
    value = int.Parse(myString);
}

Et faire quelque chose de plus comme ça.

object value = new object();
String myString = "something";
Type propType = p.PropertyType;

//this doesn't actually work
value = propType .Parse(myString);

1 votes

Vous ne montrez pas comment p est défini, une faute de frappe ?

1 votes

Au minimum, vous devriez utiliser l'option is opérateur. J'ai mis à jour votre question pour vérifier correctement le type sans utiliser la réflexion.

3 votes

@David Pfeffer, is est appliqué de manière incorrecte. is dans ce contexte ne retournera jamais vrai [ propType sera toujours de type Type ]. vous voulez utiliser propType == typeof(DateTime)

-1voto

Davy8 Points 12458

Il semble que ce que vous voulez faire (du moins si les types concernés sont des types dont vous ne pouvez pas modifier la source) nécessiterait dactylographie du canard qui n'est pas en C#

Si vous avez besoin de faire cela souvent, je mettrais la logique dans une classe ou une méthode à laquelle vous pouvez passer "myString" et "propType" et qui renverrait une valeur. Dans cette méthode, vous feriez simplement la chaîne if que vous avez ci-dessus et vous renverriez la valeur lorsqu'elle trouve une correspondance. Vous devrez toujours lister manuellement tous les types possibles, mais vous ne devrez le faire qu'une seule fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X