1

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

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

public class Customer : BusinessEntity<Customer>
{

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

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

Type type = typeof(Customer);

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

3 回答 3

2

不,这肯定会返回所有 3 个属性。在你的真实代码中检查是否Idinternal// protectedetc(即非公开)。如果是,则需要传入BindingFlags,例如:

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

(默认为公共+实例+静态)

还要检查它是否不是您实际代码中的字段;如果是:

public int Id;

那么它是一个字段,你应该使用GetFields makeId一个属性;p

于 2012-07-25T07:58:59.240 回答
1

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

PropertyInfo[] baseProperties = typeof(Customer).BaseType.GetProperties(BindingFlags.DeclaredOnly);
PropertyInfo[] properties = typeof(Customer).GetProperties(); 
于 2012-07-25T08:00:41.933 回答
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
于 2012-07-25T08:01:40.637 回答