我想确定一些对象是从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>)));
qazxsw poi关键字有效,但我必须在没有关键字的情况下解决这个问题。
要做你想做的事,你需要使用is
:
IsAssignableFrom
typeof(IEnumerable).IsAssignableFrom(a.GetType())
明确指出:
IsSubclassOf方法不能用于确定接口是从另一个接口派生,还是类是否实现接口。为此目的使用IsAssignableFrom方法。