Получить тип элементов списка, проходящих через 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<>))