反射遍历List<>泛型类型

有这样一个需求:一个实体模型,有一个属性是一个实体列表List<OrderDetail>,我需要对实体列表遍历,对每一个实体的属性根据属性特性进行验证,如是否为必填等等,如下一个反射方法能满足需求。

public class OrderObj
{
    public Order order {get;set;}
    public List<OrderDetail> orderDetail {get;set;}   
}

public class Order
{
    public string OrderID {get;set;}
}

public class OrderDetail
{
    [Required]
    public string ID {get;set;}
    [Number]
    public string Quantity {get;set}
}

 

示例代码:

public void MyMethod(object obj)
{
    foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
    {
        object value = propertyInfo.GetValue(obj, null);
        if (propertyInfo.PropertyType.IsGenericType)
        {
            Type objType = value.GetType();
            int count = Convert.ToInt32(objType.GetProperty("Count").GetValue(value, null));
            for (int i = 0; i < count; i++)
            {
                object listItem = objType.GetProperty("Item").GetValue(value, new object[] { i });
            }
        }
    }
}

 

posted @ 2013-08-13 17:57  PongorXi  阅读(7685)  评论(0编辑  收藏  举报