返回派生类的实例中的所有字段
我正在寻找一种方法来返回对象中的每个字段的值,最好是以列表的形式返回,但任何集合类型都可以工作。经过一番研究,我发现这个代码返回派生类的实例中的所有字段
FieldInfo[] fields = this.GetType().GetFields();
foreach(FieldInfo field in fields)
// Perform actions
这是处理这个问题的正确方法吗?另外,如果我将此方法放在基类中,如果派生类调用它,它会返回派生类还是基类中的所有字段? (或者更简单地说,我是否需要为每个派生类重写此代码?)
如果这是唯一的方法,对每个类单独执行它并不是个问题,但我只是希望保存一些代码,因为我将要有50多个派生类。
您使用GetType()
,这样将返回实际对象类型的字段,不是你声明的方法类型。你并不需要重写
但是,你的代码目前只得到公共领域 - 我希望你不要有任何:)
你可能想是这样的:
var fields = GetType().GetFields(BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public);
...
我相信将包含继承字段(因为它不指定BindingFlags.DeclaredOnly
),但你应该检查。
是的,这是处理这个问题的正确方法。
this.GetType()
whill返回对象的实际类型,所以如果它是派生类,它将返回派生类的类型,它将按预期工作。所以:不,你不必在每个子类中重写它。
一件事:GetType()
只返回公共字段。如果你还想要其他字段,那么你需要使用过载GetType(BindingFlags)
并指定适当的标志。
继续前进并向上投票,感谢您的快速回答! – shmeeps
感谢您的快速响应! – shmeeps