这是一段代码
public class Order
{
//Primary Key
public long OrderId { get; set; }
//Many to One Relationship
[ParentObject("PersonId")]
public Person Buyer { get; set; }
//One to Many Relationship
[ChildObject("OrderId")]
public List<OrderDetail> OrderDetails { get; set; }
public decimal TotalAmount
{
get
{
if (OrderDetails == null)
return 0;
return OrderDetails.Sum(o => o.LineItemCost);
}
}
public string Notes { get; set; }
}
我正在尝试检查Order对象。现在我想做的是:获取所有属性并尝试找出实例的类类型
public List<OrderDetail> OrderDetails { get; set; }
我想获得另一个类“OrderDetail”。当我尝试使用PropertyInfo.PropertyType获取它时,我得到“List1”(通用类型),PropertyInfo.GetType()给出一些System.Reflection.RuntimeType,PropertyInfo.DeclaringType给出“Order”(包含属性的类)。如果有人能提出解决方案,我将不得不承担责任。提前谢谢。
答案 0 :(得分:4)
您可以使用GetGenericArguments()方法并执行:
typeof(Order).GetProperty("OrderDetails").PropertyType.GetGenericArguments()[0]
答案 1 :(得分:2)
PropertyInfo.PropertyType返回的类型为typeof(List<OrderDetail>)
使用此方法,您可以使用Type.GetGenericArguments()
Type propertyType = property.PropertyType;
if(propertyType.IsGeneric && propertyType.GetGenericTypeDefinition() == typeof(List<>))
{
Type argType = propertyType.GetGenericArguments()[0];
// argType will give you your OrderDetail
}
答案 2 :(得分:1)
您是否正在寻找如何了解通用参数?
假设您在某个变量中有一个Order实例,例如“someOrder”:
someOrder.OrderDetails.GetType().GetGenericArguments();
由于List只有一个泛型参数,因此Type.GetGenericArguments方法将返回一个项目数组:Order type。
它正在解决你的问题,不是吗?
似乎你不知道OrderDetails类型是List`1(具有单个泛型参数的通用列表)。 PropertyInfo.PropertyType公开,因为此类属性的类型是通用列表。您想知道该通用列表的泛型类型。