Définit la propriété Nullable & lt; & gt; par réflexion
J'ai essayer de mettre une Nullable<> propriété dynamicly.
- Je Obtenir ma propriété ex :
PropertyInfo property = class.GetProperty("PropertyName"); //My property is Nullable<> at this time So the type could be a string or int
Je veux mettre ma propriété par la réflexion comme
property.SetValue(class,"1256",null);
Il ne fonctionne pas lors de ma propriété est Nullable<> Générique. Donc j'essaie de trouver un moyen de mettre ma propriété.
De connaître le type de mon nullable<> propriété-je exécuter des
Nullable.GetUnderlyingType(property.PropertyType)
Une idée ?
- J'Essaie de créer une instance de ma Nullable<> propriété avec
var nullVar = Activateur.CreateInstance(typeof(Nullable<>).MakeGenericType(new Type[] { Nullable.GetUnderlyingType(de la propriété.PropertyType) }));
Mais nullVar est toujours Null
source d'informationauteur Cédric Boivin
Vous devez vous connecter pour publier un commentaire.
Si vous voulez convertir une chaîne de caractères arbitraire pour le sous-type des valeurs null, vous pouvez utiliser la classe Convert:
Cet exemple ne fonctionnera que si la cible est de type int, short, long (ou non signé variantes, depuis la chaîne d'entrée représente un nombre non négatif), double, float, ou décimal. Mise en garde: ce n'est pas la vitesse du code.
Si c'est un nullable int, vous aurez besoin d'utiliser un paramètre de type int, pas une chaîne de caractères.
Noter le changement de klass, au lieu de la classe, de la classe est un mot clé réservé. Vous pouvez également utiliser @classe si absolument nécessaire (en le citant).
Si votre propriété est un générique, alors je pense que vous aurez probablement besoin d'utiliser la fonction convert pour Convertir tout ce que vous avez tout ce dont vous avez besoin.
Ici est un exemple montrant comment le faire:
Comme d'autres l'ont mentionné que vous devez passer du bon type pour le
SetValue
fonction, mais votre autre code de réflexion n'est pas tout à fait droit. Vous avez besoin d'obtenir le type de la classe en question avant que vous pouvez interroger pour ses membres.Edit: Si je comprends bien, vous essayez de définir une chaîne de valeur à la propriété via la réflexion. Pour ce faire, vous aurez besoin de faire un peu de type de l'inspection et de conversion de type.
Voici un exemple de ce que je veux dire:
Cette approche peut être utilisée en toute sécurité, indépendamment de si oui ou non la propriété est
Nullable<>
."1256"
est une chaîne de caractères, pas un int.J'ai frappé ce même problème comme un problème avec Convertir.ChangeType pas de manipulation DateTimes sur Nullable donc j'ai combiné un couple de stackoverflow de solutions .NET 4 dynamique de la magie pour obtenir quelque chose que je pense est une sorte de douce. Si vous regardez le code, nous utilisons dynamique pour le type de l'objet à Nullable au moment de l'exécution, alors le temps d'exécution traite différemment et permet affectations du type de base à l'objet nullable.