PropertyInfo SetValue et les valeurs null
Si j'ai quelque chose comme:
object value = null;
Foo foo = new Foo();
PropertyInfo property = Foo.GetProperties().Single(p => p.Name == "IntProperty");
property.SetValue(foo, value, null);
Puis foo.IntProperty
obtient mis à 0
, même si value = null
. Il semble qu'il fait quelque chose comme IntProperty = default(typeof(int))
. Je voudrais jeter un InvalidCastException
si IntProperty
n'est pas un "nullable" type (Nullable<>
ou de référence). Je suis l'aide de la Réflexion, donc je ne connais pas le type à l'avance. Comment pourrais-je aller sur le faire?
Vous devez vous connecter pour publier un commentaire.
Si vous avez la
PropertyInfo
, vous pouvez vérifier la.PropertyType
; si.IsValueType
est vrai, et siNullable.GetUnderlyingType(property.PropertyType)
est nulle, alors c'est un non nullable valeur de type:Vous pouvez utiliser PropertyInfo.PropertyType.IsAssignableFrom(de la valeur.GetType()) expression afin de déterminer si la valeur peut être écrit dans la propriété. Mais vous avez besoin pour gérer les cas lorsque la valeur est null, dans ce cas, vous pouvez l'affecter à la propriété que si la propriété est de type nullable ou de la propriété type est le type de référence:
Aussi, vous pourriez trouver utile de le Convertir.ChangeType méthode pour écrire convertible valeurs à la propriété.