C#在字段列表的字符串中按名称设置属性

时间:2013-02-25 17:13:09

标签: c# reflection properties

我使用以下代码获取对象的所有实例:

 Type type = this.GetType();
 FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic |
                                     BindingFlags.Instance);  

但是我无法更改Enabled等按钮的属性 因为SetValue获得实例类的目标而我没有这个。我只有名字和类型。 现在如何更改字段中存在的对象的属性(已启用)。

2 个答案:

答案 0 :(得分:1)

尝试稍微修改您的反射代码。首先,您必须引用对象和您特别想要的property。请注意,PropertyField不同。

MyObject.GetType().GetProperty("Enabled").SetValue(MyObject, bEnabled, null);

你使用MyObject的类型,是一个按钮或一个表单或其他...然后你按名称Enabled引用属性,然后你将它设置为{{1} }}

如果您想事先获取属性,可以将实例存储在变量中,但请再次记住属性不是字段。

MyObject

您可以使用PropertyInfo[] piSet = MyObject.GetType().GetProperties(); 获取属性集,但如果this与您尝试启用/禁用的控件不同this,则不建议使用此属性。

添加了修改

在重新阅读问题后,我得到了这个:你似乎想要的是多层反射和泛型。您正在寻找的控件是附加到“this”的字段。你能做的就是这些。

Type

答案 1 :(得分:0)

首先,您实际上正在使用对象的字段。如果你真的想要可写属性,那么你需要这样的东西:

PropertyInfo[] properties = type.GetProperties(Public | SetProperty | Instance);

完成后,您的启用属性可能因此设置:

myenabledPropertyInfo.SetValue(targetObject, value, null);

其中targetobject是我们感兴趣的Enabled属性的对象,value是我们希望赋值的值(在这种情况下,可能是布尔值...)

希望有帮助...