繁体   English   中英

如何从类中获取特定类型的所有可枚举属性

[英]How to get all enumerable properties of a specific type from a class

假设我有一个看起来像这样的 poco 类:

public MyClass
{
    public IAssimilator p1 {get; set;}
    public IAssimilator p2 {get; set;}
    public IAssimilator p3 {get; set;}
    public string n1 {get; set;}

    public List<IAssimilator> p4 {get; set;}
    public IEnumerable<IAssimilator> p5 {get; set;}
    public List<int> n2 {get; set;}
}

我在别处有一个方法,它返回 MyClass 上具有IAssimilator类型的所有属性的List 它看起来像这样:

private List<IAssimilator> GetAssimilatorsOnClass(MyClass myInstance)
{
    return typeof(MyClass).GetProperties()
                .Where(p => p.PropertyType == typeof(IAssimilator))
                .Select(p => p.GetValue(myInstance) as IAssimilator)
                .ToList();
}

它将返回一个List<IAssimilator> ,其中包含 p1 到 p3 的值。

我想添加的是还可以在任何可枚举属性中获取 IAssimilator 值的内容。 在这种情况下,它应该返回一个列表,其中包含 p4 和 p5 中的值,但不包含 n2。 我真的不知道从哪里开始。

因此,您要过滤所有类型为IEnumerable<IAssimilator>或派生自IEnumerable<IAssimilator> 你可以对你已经做过的事情做类似的事情:

private IEnumerable<IEnumerable<IAssimilator>> GetAssimilatorListsOnClass(MyClass myInstance)
{
    typeof(MyClass)
        .GetProperties()
        .Where(p => typeof(IEnumerable<IAssimilator>).IsAssignableFrom(p.PropertyType))
        .Select(p => p.GetValue(myInstance))
        .Cast<IEnumerable<IAssimilator>>();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM