通过检查其泛型类型来查找具有反射的特定属性

Ton*_*Nam 2 c# generics reflection

假设我有班级

public partial class MyEntities: DbContext
{
     public DbSet<Customer> Customers {get;set;}
     public DbSet<CustomerInfo> CustomerInfos {get;set;}
     public DbSet<Order> Orders {get;set;}
     // etc
}
Run Code Online (Sandbox Code Playgroud)

如何找到具有泛型类型的属性Customer

换句话说,我正在寻找创建方法:

 public PropertyInfo GetProperty<T>(){
     var allProperties = TypeOf(MyEntities).GetProperties();
     // implementation
 }
Run Code Online (Sandbox Code Playgroud)

如果我调用该方法,GetProperty<Customer>()那么我想得到第一个属性.如果我调用该方法,GetProperty<Order>()那么我想得到最后一个属性.我怎样才能<Type>用反射检查?

McG*_*gle 7

使用Type.IsGenericTypeType.GetGenericArguments():

public PropertyInfo GetProperty<T>(){
    var allProperties = TypeOf(MyEntities).GetProperties();
    return allProperties.FirstOrDefault(prop => prop.PropertyType.IsGenericType
        && prop.PropertyType.GenericTypeArguments.FirstOrDefault() == typeof(T));
}
Run Code Online (Sandbox Code Playgroud)