Спасибо @ drzaus за его приятный ответ , но его можно сжать до одного лайнера (плюс проверка для типов null
s и IEnumerable
):
public static Type GetEnumeratedType(this Type type) =>
type?.GetElementType()
?? typeof(IEnumerable).IsAssignableFrom(type)
? type.GenericTypeArguments.FirstOrDefault()
: null;
Добавлены null
шашки, чтобы избежать исключения, может быть, я не должен (не стесняйтесь удалять Пустые условные операторы ).Также добавлен фильтр, чтобы функция работала только с коллекциями, а не с общими типами.
И имейте в виду, что это также может быть одурачено реализованными подклассами, которые изменяют тему коллекции, и разработчик решил переместитьуниверсальный аргумент типа коллекции на более позднюю позицию.