2015-01-29 2 views
2

Зацикливание свойств свойства общего типа T. Я хотел бы знать, является ли TList, а затем какие типы элементов содержат этот список.Получить тип элементов списка, перейдя через PropertyDescriptorCollection

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

я могу обнаружить, если тип является List, используя код выше, но тогда как я могу получить тип элементов списка?

ответ

2

Вы можете получить общие аргументы использовать GetGenericArguments метод, он возвращает массив типов, вы можете просто получить первый тип, который является типом родового аргумента в списке:

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

Также вместо сравнение имен для проверки типа собственности Я бы предложил таким образом:

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