long?
のプロパティはint
で埋められます。リフレクトを使用してプロパティを設定するときの型変換の問題
私はちょうどobj.Value = v;
直接プロパティを設定しますが、私は試してみて、反射info.SetValue(obj, v, null);
を通じてプロパティを設定すると、それは私に次の例外を与えたときにこれが正常に動作します:タイプの
オブジェクトの可能System.Int32 'にすることはできませんタイプ 'System.Nullable`1 [System.Int64]'に変換されます。
これは単純化したシナリオです:直接プロパティを設定するとき、それが動作しながら、reflection
てプロパティを設定するとき
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);
}
なぜそれが機能しないのですか?
優秀な回答!! – series0ne
遅れて申し訳ありませんが、あなたのコードサンプルを使いこなしていました。これはトリックでした、ありがとう! – Shikyo
'null'を設定すると動作しません。修正は簡単ですが、あなたの投稿を編集しようとしましたが、拒否されました。 – Shikyo