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

时间:2014-02-21 00:20:03

标签: 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
}

如何找到具有通用类型Customer

的属性

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

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

如果我将方法称为GetProperty<Customer>(),那么我想获得第一个属性。如果我将方法称为GetProperty<Order>(),那么我想获得最后一个属性。如何用反射检查<Type>

1 个答案:

答案 0 :(得分: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));
}