We have a property of type long? that gets filled with an int.
This works fine when i just set the property directly obj.Value = v; but when i try and set the property through reflection info.SetValue(obj, v, null); it gives me a the following exception:
Object of type ‘System.Int32’ cannot be converted to type ‘System.Nullable`1[System.Int64]’.
This is a simplified scenario:
class TestClass
{
public long? Value { get; set; }
}
[TestMethod]
public void TestMethod2()
{
TestClass obj = new TestClass();
Type t = obj.GetType();
PropertyInfo info = t.GetProperty("Value");
int v = 1;
// This works
obj.Value = v;
// This does not work
info.SetValue(obj, v, null);
}
Why does it not work when setting the property through reflection while it works when setting the property directly?
Check full article : How to set value of a property using Reflection?
full code if you are setting value for nullable type
you need to convert value like this i.e you need to convert value to your property type like as below
you need to do this because you cannot convert any arbirtary value to given type…so you need to convert it like this