一尘不染

有没有办法使用反射在结构实例上设置属性?

c#

我正在尝试编写一些代码来设置结构的属性(重要的是它是结构的属性),但失败了:

System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle();
PropertyInfo propertyInfo = typeof(System.Drawing.Rectangle).GetProperty("Height");
propertyInfo.SetValue(rectangle, 5, null);

高度值(由调试器报告)永远不会设置为任何值-它保持默认值0。

之前我在课堂上做了很多思考,并且效果很好。另外,我知道在处理结构时,如果设置字段,则需要使用FieldInfo.SetValueDirect,但是我不知道PropertyInfo的等效项。


阅读 243

收藏
2020-05-19

共1个答案

一尘不染

的值rectangle被装箱-但是您将丢失被修改的装箱值。尝试这个:

Rectangle rectangle = new Rectangle();
PropertyInfo propertyInfo = typeof(Rectangle).GetProperty("Height");
object boxed = rectangle;
propertyInfo.SetValue(boxed, 5, null);
rectangle = (Rectangle) boxed;
2020-05-19