Список <int>не является подклассом IEnumerable - PullRequest
0 голосов
/ 31 марта 2019

Я хочу определить, что некоторый объект является производным от IEnumerable, но Reflection говорит, что List<int> не является подклассом IEnumerable.

https://dotnetfiddle.net/an1n62

var a = new List<int>();

// true
Console.WriteLine(a is IEnumerable);

// falsa
Console.WriteLine(a.GetType().IsSubclassOf(typeof(IEnumerable)));
Console.WriteLine(a.GetType().IsSubclassOf(typeof(IEnumerable<>)));
Console.WriteLine(a.GetType().IsSubclassOf(typeof(IEnumerable<int>)));

is поиск ключевых слов работает, но я должен справиться с этим без ключевого слова.

1 Ответ

3 голосов
/ 31 марта 2019

Чтобы сделать то, что вы хотите, вам нужно использовать IsAssignableFrom:

typeof(IEnumerable).IsAssignableFrom(a.GetType())

Документация для IsSubclassOf явно гласит:

Метод IsSubclassOf нельзя использовать для определения того, является ли интерфейс производным от другого интерфейса или класс реализует интерфейс.Для этого используйте метод IsAssignableFrom.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...