Похоже, вы задаете два разных вопроса: является ли тип массивом (например, string[]
) или любым типом коллекции.
Для первых просто отметьте property.PropertyType.IsArray
.
Для последнего вы должны решить, каким минимальным критериям вы хотите, чтобы тип соответствовал. Например, вы можете проверить неуниверсальный IEnumerable
, используя typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
. Вы также можете использовать это для универсальных интерфейсов, если вы знаете фактический тип T, например, typeof(IEnumerable<int>).IsAssignableFrom(property.PropertyType)
.
Проверка универсального IEnumerable<T>
или любого другого универсального интерфейса без знания значения T может быть выполнена путем проверки, если property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName)
не null
. Обратите внимание, что в этом коде я не указал тип для T
. Вы можете сделать то же самое для IList<T>
или любого другого интересующего вас типа.
Например, вы можете использовать следующее, если хотите проверить общий IEnumerable<T>
:
public bool IsPropertyACollection(PropertyInfo property)
{
return property.PropertyType.GetInterface(typeof(IEnumerable<>).FullName) != null;
}
Массивы также реализуют IEnumerable, поэтому они также будут возвращать true
из этого метода.