遍历通用类型T的属性,我想知道T是否恰好是List,那么该列表包含什么类型的项目。

PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
foreach (PropertyDescriptor prop in properties)
       if (prop.PropertyType.Name.Equals("List`1"))
       ???


我可以使用上面的代码检测类型是否为List,但是如何获取列表项的类型?

最佳答案

您可以使用GetGenericArguments方法获取通用参数,它将返回一个类型数组,您可以仅获取第一个类型,即列表中的通用参数类型:

var type = prop.PropertyType.GetGenericArguments()[0];


另外,我不建议通过比较名称来检查属性类型:

if(prop.PropertyType.IsGenericType &&
   prop.PropertyType.GetGenericTypeDefinition() == typeof(List<>))

10-07 13:55
查看更多