Запись значения в член struct var с отражением не работает, но это работает для классов - PullRequest
4 голосов
/ 16 марта 2012

Я читал здесь в stackoverflow, как писать в член класса var, используя отражение.Я использую что-то вроде:

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

Это работает для классов, но если я делаю то же самое для Struct вместо класса при чтении myvar, я всегда получаю 0 (значение конструкции по умолчанию для int).Вот код, который я использую:

struct MyStruct
{
    public int myvar;
}

MyStruct instance=new MyStruct();

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

Кто-нибудь знает, почему это могло произойти?

1 Ответ

5 голосов
/ 16 марта 2012

Когда вы передаете «instance», это окно, которое представляет собой завернутый клон данных, которые вы позже отбрасываете.

Чтобы использовать отражение здесь:

object obj = instance; // box
blah.SetValue(obj, value); // mutate inside box
instance = (YourType)obj; // unbox
...