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()方法时,它不起作用(它返回一个空数组)。但是,如果我将字段的可见性更改为"公共",它可以工作。
有人知道我如何在不公开的情况下让它工作吗?
谢谢
试试这个:
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