C# :使用 System.Reflection.GetFields() 显示字段元数据

本文关键字:显示 字段 元数据 GetFields 使用 System Reflection | 更新日期: 2023-09-27 18:32:30

可能的重复项:
找到一个有反射的私人领域?

我正在尝试使用 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()方法时,它不起作用(它返回一个空数组)。但是,如果我将字段的可见性更改为"公共",它可以工作。

有人知道我如何在不公开的情况下让它工作吗?

谢谢

C# :使用 System.Reflection.GetFields() 显示字段元数据

试试这个:

GetFields(BindingFlags.NonPublic | BindingFlags.Instance)

更新:以下是在没有参数的情况下调用 GetFields 时的情况:

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

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

顺便说一下,这里是msdn中GetFields()方法的描述:

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

试试这个

var fieldinfo = typeof(Element).GetField("field name", BindingFlags.NonPublic |
                             BindingFlags.Instance);

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

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

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

有关详细信息,请查看 msdn:MSDN