4

ここで、リフレクションを使用してクラス var メンバーに書き込む方法を stackoverflow で読んでいます。私は次のようなものを使用します:

typeof(MyClass).GetField("myvar", BindingFlags.Public | BindingFlags.Instance).SetValue(instancie, 10);

これはクラスに対して機能しますが、myvar を読み取るときにクラスではなく Struct に対して同じことを行うと、常に 0 (int のデフォルトの構築値) になります。これは私が使用するコードです:

struct MyStruct
{
    public int myvar;
}

MyStruct instance=new MyStruct();

typeof(MyStruct).GetField("myvar", BindingFlags.Public | BindingFlags. BindingFlags.Instance).SetValue(instance, 10);

なぜこれが起こっているのか知っている人はいますか?

4

1 に答える 1

5

「インスタンス」を渡すと、それはボックスです。これはデータのラップされたクローンであり、後で破棄します。

ここでリフレクションを使用するには:

object obj = instance; // box
blah.SetValue(obj, value); // mutate inside box
instance = (YourType)obj; // unbox
于 2012-03-16T16:14:38.733 に答える