linq 查找特定类型的对象属性

vi4fp9gy  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(144)

我尝试递归地建立一个对象的所有字段的列表,这些字段都是特定类型的。递归是必要的,因为对象可以容纳对象数组,而对象数组又可能包含特定类型的字段。
因此,如果一个对象有一个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语句,但它们也没有得到任何有用的结果。
有人知道实现这一目标的最佳方法是什么吗?

jm81lzqq

jm81lzqq1#

你的问题有许多错别字和语法错误,但我可以提出几点建议:
1.确保您需要的是GetProperties,而不是GetFields。您的示例看起来只有字段,而没有属性。
1.请确保在调用GetProperties时提供了正确的BindingFlags。您的示例似乎包含私有成员。在这种情况下,应使用BindingFlags.NonPublic | BindingFlags.Instance

相关问题