我正在寻找一种方法来返回对象中每个字段的值,最好以列表的形式返回,但任何集合类型都可以。经过一番研究,我发现了这段代码
FieldInfo[] fields = this.GetType().GetFields();
foreach(FieldInfo field in fields)
// Perform actions
这是处理此问题的正确方法吗?另外,如果我将此方法放在基类中,如果派生类调用它,它将返回派生类或基类中的所有字段吗? (或者更简单地说,我需要为每个派生类重写这个吗?)
如果这是唯一的方法,那么为每个类单独执行它不是一个问题,但我只是想节省一些代码,因为我将有50多个派生类。
答案 0 :(得分:3)
您正在使用GetType()
,因此会返回实际对象类型的字段,而不是您声明方法的类型。您不需要覆盖
但是,您的代码目前只会获取 public 字段 - 我希望您没有:>
您可能需要以下内容:
var fields = GetType().GetFields(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public);
...
我相信将包含继承的字段(因为它没有指定BindingFlags.DeclaredOnly
),但您应该检查。
答案 1 :(得分:1)
是的,这是处理此问题的正确方法。
this.GetType()
将返回对象的实际类型,因此如果它是派生类,它将返回派生类的类型,并且它将按预期工作。所以:不,你不必在每个子类中重写它。
一件事:GetType()
仅返回公共字段。如果您还想要其他字段,则需要使用重载GetType(BindingFlags)
并指定适当的标记。