通过 PropertyDescriptorCollection 循环获取列表项的类型

Get the type of List items looping through PropertyDescriptorCollection

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

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

我可以使用上面的代码检测类型是否为 List,但是我怎样才能获得列表项的类型?

您可以使用 GetGenericArguments 方法获取泛型参数,它将 return 一个类型数组,您可以只获取第一个类型,即列表中泛型参数的类型:

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

此外,我建议这样而不是比较名称来检查 属性 类型:

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