gpt4 book ai didi

c# - 从泛型类获取 ICollection 类型属性的列表

转载 作者:太空狗 更新时间:2023-10-30 00:19:06 25 4
gpt4 key购买 nike

我有一个包含一些 ICollection 类型属性的对象

所以类基本上是这样的:

Class Employee {

public ICollection<Address> Addresses {get;set;}

public ICollection<Performance> Performances {get; set;}

}

问题是通过使用反射在 Generic 类中获取 ICollection 类型的属性名称。

我的通用类是

Class CRUD<TEntity>  {

public object Get() {
var properties = typeof(TEntity).GetProperties().Where(m=m.GetType() == typeof(ICollection ) ...
}

但它不起作用。

我怎样才能在这里买房?

最佳答案

GetProperties()返回 PropertyInfo[] .然后你做一个Where使用 m.GetType() .如果我们假设您错过了 > , 这是 m=>m.GetType() ,那么你实际上是在说:

 typeof(PropertyInfo) == typeof(ICollection)

(注意:实际上,它可能是一个 RuntimePropertyInfo 等)

的意思可能是:

typeof(ICollection).IsAssignableFrom(m.PropertyType)

但是!注意 ICollection <> ICollection<> <> ICollection<Address>等等 - 所以它甚至不是那么容易。您可能需要:

m.PropertyType.IsGenericType &&
m.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>)

已确认;这有效:

static void Main()
{
Foo<Employee>();
}
static void Foo<TEntity>() {
var properties = typeof(TEntity).GetProperties().Where(m =>
m.PropertyType.IsGenericType &&
m.PropertyType.GetGenericTypeDefinition() == typeof(ICollection<>)
).ToArray();
// ^^^ contains Addresses and Performances
}

关于c# - 从泛型类获取 ICollection 类型属性的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25032583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com