List <int>不是“ IEnumerable”的子类

时间:2019-03-31 07:13:32

标签: c# .net reflection

我想确定某个对象是从IEnumerable派生的,但是反射说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 个答案:

答案 0 :(得分:3)

要执行所需的操作,您需要使用IsAssignableFrom

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

documentation for IsSubclassOf明确声明:

  

IsSubclassOf方法不能用于确定是否   接口是从另一个接口派生的,还是一个类   实现一个接口。为此使用IsAssignableFrom方法   目的。