2011-06-28 43 views
0

我正在寻找一种方法来返回对象中的每个字段的值,最好是以列表的形式返回,但任何集合类型都可以工作。经过一番研究,我发现这个代码返回派生类的实例中的所有字段

FieldInfo[] fields = this.GetType().GetFields(); 

foreach(FieldInfo field in fields) 
    // Perform actions 

这是处理这个问题的正确方法吗?另外,如果我将此方法放在基类中,如果派生类调用它,它会返回派生类还是基类中的所有字段? (或者更简单地说,我是否需要为每个派生类重写此代码?)

如果这是唯一的方法,对每个类单独执行它并不是个问题,但我只是希望保存一些代码,因为我将要有50多个派生类。

回答

3

您使用GetType(),这样将返回实际对象类型的字段,不是你声明的方法类型。你并不需要重写

但是,你的代码目前只得到公共领域 - 我希望你不要有任何:)

你可能想是这样的:

var fields = GetType().GetFields(BindingFlags.Instance | 
           BindingFlags.NonPublic | 
           BindingFlags.Public); 
... 

相信将包含继承字段(因为它不指定BindingFlags.DeclaredOnly),但你应该检查。

+0

感谢您的快速响应! – shmeeps

1

是的,这是处理这个问题的正确方法。

this.GetType() whill返回对象的实际类型,所以如果它是派生类,它将返回派生类的类型,它将按预期工作。所以:不,你不必在每个子类中重写它。

一件事:GetType()只返回公共字段。如果你还想要其他字段,那么你需要使用过载GetType(BindingFlags)并指定适当的标志。

+0

继续前进并向上投票,感谢您的快速回答! – shmeeps