Мне нужно проверить объект, чтобы увидеть, является ли он нулевым, тип значения или IEnumerable<T>
, где T
- тип значения. До сих пор у меня есть:Как узнать, является ли тип объекта подклассом IEnumerable <T> для любого значения типа T?
if ((obj == null) ||
(obj .GetType().IsValueType))
{
valid = true;
}
else if (obj.GetType().IsSubclassOf(typeof(IEnumerable<>)))
{
// TODO: check whether the generic parameter is a value type.
}
Так я обнаружил, что объект имеет нулевое значение, тип значения или IEnumerable<T>
для некоторых T
; как я могу проверить, является ли этот тип T
?
Является GetInterfaces достаточно рекурсивный означает, что вам не нужно беспокоиться о поездке до родителей типы? –
@ Jon: Думаю, да, да. –
Вам не нужна рекурсия. Класс либо реализует интерфейс, либо нет. Это плоский список, независимо от того, как сами интерфейсы «наследуют» друг друга. – Tar