我有课:
class A {
public string a = "A-val" , b = "B-val";
}
我想通过反射打印对象成员
//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";
}
这是期望的结果:
a = A-val
b = B-val
不幸的是这不起作用。请帮忙,谢谢。
确实可以工作 - 我刚刚尝试过,它显示了名称和值,没有任何问题。
我的猜测是,实际上,您正在尝试使用非公开的字段。此代码:
FieldInfo[] fields = data.GetType().GetFields();
...只会获得
public字段。您通常需要指定您还需要非公共字段:
FieldInfo[] fields = data.GetType().GetFields(BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
(我希望你不要
真的有公共领域,毕竟……)
public string VarName{ get; set;}
那么实际上你有这段代码(这就是反射看到的):
private string _varName;
public string get_VarName(){
....
}
public void set_VarName(strig value){
....
}
FieldInfo[] fields = data.GetType()
.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Where(f => f.GetCustomAttribute<CompilerGeneratedAttribute>() == null)
.ToArray();