我们有一个类型为long?
的属性,该属性被填充为int
。通过反射设置属性时的类型转换问题
这工作得很好,当我刚刚设置的属性直接obj.Value = v;
但是当我尝试并设置通过反射info.SetValue(obj, v, null);
属性它给了我以下异常:
类型的对象“System.Int32”不能转换为类型'System.Nullable`1 [System.Int64]'。
这是一个简化的情景:
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);
}
为什么通过reflection
设置属性时,而它直接设置属性时,它不工作?
优秀的答案! – series0ne
对不起,延误了你的代码示例。这个伎俩,谢谢! – Shikyo
设置'null'时不起作用。这很容易解决,试图编辑你的文章,但被拒绝。 – Shikyo