2013-10-16 57 views
2

我有一个简单的POCO类,例如如何在支持字段存在时通过反射来获取类字段?

class C { 
    [MyAtrib] 
    public int i {get; set;} 
    [MyAtrib] 
    public int i2; 
} 

当我打电话:

GetType().GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 

在该类上(实例)我不能得到FieldInfo对于已经自动生成getter/setter方法的那些成员(即高于int i)。

其实,我正在尝试阅读这些自定义属性(MyAtrib),并且无法为具有{get; set;}的那些属性执行此操作。

这是为什么?因为i是公开的,所以我期望得到i和(私人)支持字段。

我可以通过反射以某种方式得到iMyAtrib吗?

+3

那些有getter和setter方法不专业;他们是属性。 –

+3

使用'GetProperties' –

+0

你一定会得到后台字段,使用BindingFlags.NonPublic就足够了。它有一个难以形容的名字,' k__BackingField'。该属性*不适用于后台字段,它存在于属性上。调用GetProperty()需要检索它。 –

回答

6

你现在得到的领域,但public int i {get; set;}是一个属性。 你需要得到属性:

// note: properties -> generally public 
GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); 
相关问题