我正在尝试使用System.Reflection.GetFields()方法显示类的字段名称。
问题是它只在字段声明为“public”时才有效。 例如:
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()方法时,它不起作用(它返回一个空数组)。但是,如果我将字段的可见性更改为“public”,则可以正常工作..
任何人都知道如何在不公开的情况下让它工作?
由于
答案 0 :(得分:3)
试试这个:
GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
更新: 以下是在没有参数的情况下调用GetFields时场景下的内容:
public FieldInfo[] GetFields()
{
return this.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
}
因此,正如您所看到的,默认情况下不会返回私有字段。
这里是来自msdn的GetFields()方法的描述:
返回当前Type的所有公共字段。返回值:一个数组 FieldInfo对象表示为其定义的所有公共字段 当前类型。 - 或 - 如果没有公共字段,则为FieldInfo类型的空数组 是为当前类型定义的。
答案 1 :(得分:2)
试试这个
var fieldinfo = typeof(Element).GetField("field name", BindingFlags.NonPublic |
BindingFlags.Instance);
答案 2 :(得分:1)
GetFields方法仅返回 public 字段。 如果您希望它返回私有和公共字段,请使用:
c.GetType().GetFields(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public);
您必须指定 BindingFlags.Instance 或 BindingFlags.Static 以及BindingFlags.Public或BindingFlags.NonPublic,否则将不会返回任何成员。
查看msdn了解更多信息: MSDN