在具有反射的结构var成员中写入值是无效的,但对于类是有效的
本文关键字:无效 有效 于类 反射的 结构 var 成员 | 更新日期: 2023-09-27 18:28:14
我在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);
有人知道为什么会发生这种事吗?
当您传入"instance"时,这是一个框,它是数据的封装的克隆,稍后将丢弃。
在此处使用反射:
object obj = instance; // box
blah.SetValue(obj, value); // mutate inside box
instance = (YourType)obj; // unbox