If I have something like:
object value = null;
Foo foo = new Foo();
PropertyInfo property = Foo.GetProperties().Single(p => p.Name == "IntProperty");
property.SetValue(foo, value, null);
Then foo.IntProperty gets set to 0, even though value = null. It appears it's doing something like IntProperty = default(typeof(int)). I would like to throw an InvalidCastException if IntProperty is not a "nullable" type (Nullable<> or reference). I'm using Reflection, so I don't know the type ahead of time. How would I go about doing this?
If you have the PropertyInfo, you can check the .PropertyType; if .IsValueType is true, and if Nullable.GetUnderlyingType(property.PropertyType) is null, then it is a non-nullable value-type:
if (value == null && property.PropertyType.IsValueType &&
Nullable.GetUnderlyingType(property.PropertyType) == null)
{
throw new InvalidCastException ();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With