[英]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.