获取实现特定泛型基类型的所有属性
Get all properties which implements a specific generic base type
我有一个对象,它具有像这样的不同类型的通用集合属性:
ObservableCollection<T>, BindingList<T>
我想要 return 实现 ICollection<>
的所有属性。我试过了但没有成功。这个使用反射的查询似乎没有检查实现的接口:
IEnumerable<PropertyInfo> childCollections =
typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.PropertyType.IsGenericType
&& p.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>))
.Select(g => g);
我一直在使用下面的代码并且运行良好。
var properties = typeof(T).GetProperties().Where(m =>
m.PropertyType.IsGenericType &&
m.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>));
我有一个 class 集合定义为:
public virtual ICollection<Transaction> Transactions
{
get;
set;
}
您正在直接查询 属性 的类型,这意味着它本身必须是特定类型 ICollection<>
。要检查它是否实现了接口,你需要.GetInterfaces()
:
IEnumerable<PropertyInfo> childCollections =
from p in typeof(T).GetProperties()
where p.PropertyType.GetInterfaces().Any(i =>
i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof(ICollection<>)
)
select p
;
我有一个对象,它具有像这样的不同类型的通用集合属性:
ObservableCollection<T>, BindingList<T>
我想要 return 实现 ICollection<>
的所有属性。我试过了但没有成功。这个使用反射的查询似乎没有检查实现的接口:
IEnumerable<PropertyInfo> childCollections =
typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.PropertyType.IsGenericType
&& p.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>))
.Select(g => g);
我一直在使用下面的代码并且运行良好。
var properties = typeof(T).GetProperties().Where(m =>
m.PropertyType.IsGenericType &&
m.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>));
我有一个 class 集合定义为:
public virtual ICollection<Transaction> Transactions
{
get;
set;
}
您正在直接查询 属性 的类型,这意味着它本身必须是特定类型 ICollection<>
。要检查它是否实现了接口,你需要.GetInterfaces()
:
IEnumerable<PropertyInfo> childCollections =
from p in typeof(T).GetProperties()
where p.PropertyType.GetInterfaces().Any(i =>
i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof(ICollection<>)
)
select p
;