Получить тип элементов списка, проходящих через PropertyDescriptorCollection

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

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

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

1 ответ

Решение

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

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

Также вместо сравнения имен для проверки типа свойства я бы предложил следующий способ:

if(prop.PropertyType.IsGenericType &&
   prop.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
Другие вопросы по тегам