使用反射将值写入struct var成员不起作用,但它适用于类

时间:2012-03-16 16:10:05

标签: c# reflection system.reflection

我一直在这里阅读stackoverflow如何使用反射写入类var成员。我用的是:

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);

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

当您传入“实例”时,这是一个框 - 这是数据的包装克隆,您稍后会丢弃。

在这里使用反射:

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