我只是在这里提出问题,所以这个例子对现实世界没有任何意义。
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
答案 0 :(得分:2)
不,这肯定会返回所有3个属性。请检查真实代码中的Id
是internal
/ 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