返回派生类实例中的所有字段

时间:2011-06-28 22:21:43

标签: c# object field

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

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

foreach(FieldInfo field in fields)
    // Perform actions

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

如果这是唯一的方法,那么为每个类单独执行它不是一个问题,但我只是想节省一些代码,因为我将有50多个派生类。

2 个答案:

答案 0 :(得分:3)

您正在使用GetType(),因此会返回实际对象类型的字段,而不是您声明方法的类型。您不需要覆盖

但是,您的代码目前只会获取 public 字段 - 我希望您没有:>

您可能需要以下内容:

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

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

答案 1 :(得分:1)

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

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

一件事:GetType()仅返回公共字段。如果您还想要其他字段,则需要使用重载GetType(BindingFlags)并指定适当的标记。