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
プロパティを直接設定すると機能するのに、プロパティを設定すると機能しないのはなぜですか?