Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值写入带有反射的struct var成员并不可行,但对于类却有效_C#_Reflection_System.reflection - Fatal编程技术网

C# 将值写入带有反射的struct var成员并不可行,但对于类却有效

C# 将值写入带有反射的struct var成员并不可行,但对于类却有效,c#,reflection,system.reflection,C#,Reflection,System.reflection,我一直在stackoverflow阅读如何使用反射写入类var成员。我用的是: typeof(MyClass).GetField("myvar", BindingFlags.Public | BindingFlags.Instance).SetValue(instancie, 10); 这适用于类,但如果我在读取myvar时对结构而不是类执行相同的操作,那么我总是得到0(int的默认构造值)。这是我使用的代码: struct MyStruct { public int myvar; }

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

typeof(MyClass).GetField("myvar", BindingFlags.Public | BindingFlags.Instance).SetValue(instancie, 10);
这适用于类,但如果我在读取myvar时对结构而不是类执行相同的操作,那么我总是得到0(int的默认构造值)。这是我使用的代码:

struct MyStruct
{
    public int myvar;
}

MyStruct instance=new MyStruct();

typeof(MyStruct).GetField("myvar", BindingFlags.Public | BindingFlags. BindingFlags.Instance).SetValue(instance, 10);
有人知道为什么会出现这种情况吗?

当您传入“实例”时,它是一个盒子,是一个包装好的数据克隆,稍后您会丢弃它

要在此处使用反射,请执行以下操作:

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