我尝试递归地建立一个对象的所有字段的列表,这些字段都是特定类型的。递归是必要的,因为对象可以容纳对象数组,而对象数组又可能包含特定类型的字段。
因此,如果一个对象有一个Wanted
类型的字段,我希望该对象在列表中。
class a
{
Wanted m_var;
};
如果一个对象有一个包含其他对象的数组,并且这些对象包含Wanted
类型的字段,我也希望将这些对象添加到列表中。
class b
{
int m_whatever;
a[] m_vararray;
};
我已经尝试了各种方法,包括反射,但我没有任何进展。所有的尝试都是这种方法的一些变体
private IList<object> ListOfTypeWanted(object fields)
{
IList<object> result = new List<object>();
System.Reflection.MemberInfo info = fields.GetType();
object[] properties = type.GetProperties();
foreach (var p in properties)
{
if (true == p.GetType().IsArray)
{
result.Add(ListOfTypeWanted(p));
}
else
{
Type t = p.GetType();
if (p is WantedType)
{
result.Add(this);
}
}
}
return result;
}
我也尝试过使用Where()
的Linq语句,但它们也没有得到任何有用的结果。
有人知道实现这一目标的最佳方法是什么吗?
1条答案
按热度按时间jm81lzqq1#
你的问题有许多错别字和语法错误,但我可以提出几点建议:
1.确保您需要的是
GetProperties
,而不是GetFields
。您的示例看起来只有字段,而没有属性。1.请确保在调用
GetProperties
时提供了正确的BindingFlags
。您的示例似乎包含私有成员。在这种情况下,应使用BindingFlags.NonPublic | BindingFlags.Instance
。