C# 反射 设置字段值无效的解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 反射 设置字段值无效的解决办法相关的知识,希望对你有一定的参考价值。

FieldInfo.SetValue的原型是:void SetValue(object obj, object value)
当你传递一个值类型(结构是值类型)的时候,它要转化成object,也就是要装箱
而SetValue将作用在那个装箱产品上,而不是原来的那个结构。

解决办法就是自己装箱和拆箱子:

object boxedB = b;        //自己装箱,以便拿到装箱产品
fi.SetValue(boxedB, a);   //
b = (B)boxedB;            //拆箱并拿到被SetValue的结果
Console.WriteLine(b.a.x);

 

以上是关于C# 反射 设置字段值无效的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

C#关于反射创建泛型类

java field获取值

c# 如何通过反射 获取设置属性值

如何使用反射设置另一个结构的字段之一的结构字段值?

反射错误无法设置字段值

mysql order by无效问题