我想确定某个对象是从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
关键字可以找到,但是我必须在没有关键字的情况下解决这个问题。
答案 0 :(得分:3)
要执行所需的操作,您需要使用IsAssignableFrom
:
typeof(IEnumerable).IsAssignableFrom(a.GetType())
documentation for IsSubclassOf明确声明:
IsSubclassOf方法不能用于确定是否 接口是从另一个接口派生的,还是一个类 实现一个接口。为此使用IsAssignableFrom方法 目的。