C#Reflection - 从一个简单的类中获取字段值

Sex*_*yMF 37 c# reflection

我有一节课:

class A {
    public string a = "A-val" , b = "B-val";
}
Run Code Online (Sandbox Code Playgroud)

我想通过反射打印对象成员

//Object here is necessary.
Object data = new A();
FieldInfo[] fields = data.GetType().GetFields();
String str = "";
foreach(FieldInfo f in fields){
    str += f.Name + " = " + f.GetValue(data) + "\r\n";
}
Run Code Online (Sandbox Code Playgroud)

这是期望的结果:

a = A-val
b = B-val
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.请帮忙,谢谢.

Jon*_*eet 65

一旦修复以消除错误(缺少分号和错误的变量名称),您发布的代码确实有效 - 我刚试过它,它显示了名称和值没有问题.

我的猜测是,实际上,你正在尝试使用非公开的字段.这段代码:

FieldInfo[] fields = data.GetType().GetFields();
Run Code Online (Sandbox Code Playgroud)

......只会获得公共领域.您通常需要指定您还需要非公共字段:

FieldInfo[] fields = data.GetType().GetFields(BindingFlags.Public | 
                                              BindingFlags.NonPublic | 
                                              BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)

(毕竟,我希望你真的没有公共领域......)

  • @MartinBooth:是的,我正在编辑 - 基本上它实际上可以使用给出的代码,但是我怀疑*当它不工作时,OP有私有字段. (2认同)
  • @JonSkeet 截至今天 8/18/2015 我得到的默认值是: BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Instance | BindingFlags.Instance BindingFlags.Static | BindingFlags.Static | BindingFlags.Static BindingFlags.DeclaredOnly; (2认同)