2

可能重复:
使用反射查找私有字段?

我正在尝试使用 System.Reflection.GetFields() 方法显示类的字段名称。

问题是它仅在字段被声明为“公共”时才有效。例如 :

class Element
{
    private String id;
    private string a;
    private string b;
    private int c;
    private Dictionary<String, String> dict;

    public Element(String id)
    {
        this.id= id;
    }}

当我尝试调用 System.Reflection.GetFields() 方法时,它不起作用(它返回一个空数组)。但是,如果我将字段的可见性更改为“公共”,它会起作用..

有谁知道我怎样才能让它工作而不必公开?

谢谢

4

3 回答 3

3

尝试这个:

GetFields(BindingFlags.NonPublic | BindingFlags.Instance)

更新:当您在没有参数的情况下调用 GetFields 时,场景如下:

public FieldInfo[] GetFields()
{
   return this.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
}

因此,如您所见,默认情况下不返回私有字段。

顺便说一句,这里是来自 msdn的GetFields()方法的描述:

返回当前 Type 的所有公共字段。返回值: FieldInfo 对象数组,表示为当前类型定义的所有公共字段。- 或 - 如果没有为当前类型定义公共字段,则为 FieldInfo 类型的空数组。

于 2012-04-27T12:23:09.040 回答
2

尝试这个

var fieldinfo = typeof(Element).GetField("field name", BindingFlags.NonPublic |
                             BindingFlags.Instance);
于 2012-04-27T12:22:56.810 回答
1

GetFields 方法仅返回公共字段。如果您希望它返回私有和公共字段,请使用:

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

您必须指定BindingFlags.InstanceBindingFlags.Static以及 BindingFlags.Public 或 BindingFlags.NonPublic,否则将不返回任何成员。

查看 msdn 以获取更多信息: MSDN

于 2012-04-27T12:36:26.220 回答