无法通过使用反射获取泛型类型的属性

时间:2012-07-25 07:54:20

标签: c# .net reflection

我只是在这里提出问题,所以这个例子对现实世界没有任何意义。

public class BusinessEntity<T>
{
    public int Id {get; set;}
}

public class Customer : BusinessEntity<Customer>
{

    public string FirstName { get; set;}
    public string LastName { get; set;}
}

当我尝试通过反射获取Customer类属性时,我无法获得通用基类的属性。如何从BusinessEntity获取Id?

Type type = typeof(Customer);

PropertyInfo[] properties = type.GetProperties(); 
// Just FirstName and LastName listed here. I also need Id here 

3 个答案:

答案 0 :(得分:2)

不,这肯定会返回所有3个属性。请检查真实代码中的Idinternal / protected /等(即非公开)。如果是,您需要传递BindingFlags,例如:

PropertyInfo[] properties = type.GetProperties(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

(默认为public + instance + static)

同时检查您的实际代码中是否为字段;如果是:

public int Id;

然后它是一个字段,你应该使用GetFields 使Id属性 ; p < / p>

答案 1 :(得分:1)

为了获得基本属性,您必须使用Type

的BaseType属性
PropertyInfo[] baseProperties = typeof(Customer).BaseType.GetProperties(BindingFlags.DeclaredOnly);
PropertyInfo[] properties = typeof(Customer).GetProperties(); 

答案 2 :(得分:1)

问题是什么,您的代码完全正常并返回正确的属性

Type type = typeof(Customer);
PropertyInfo[] properties = type.GetProperties(); 
foreach(var prop in properties)
{ Console.WriteLine(prop) }

结果

System.String FirstName 
System.String LastName 
Int32 Id