【问题标题】:List<int> is not a subclass of 'IEnumerable'List<int> 不是 'IEnumerable' 的子类
【发布时间】:2019-03-31 07:13:31
【问题描述】:

我想确定某个对象是从IEnumerable 派生的,但反射说List&lt;int&gt; 不是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 关键字有效,但我必须在没有关键字的情况下解决这个问题。

【问题讨论】:

  • IsAssignableFrom

标签: c# .net reflection


【解决方案1】:

要做你想做的事,你需要使用IsAssignableFrom

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

documentation for IsSubclassOf 明确指出:

IsSubclassOf 方法不能用于确定一个 接口派生自另一个接口,或者一个类 实现一个接口。为此使用 IsAssignableFrom 方法 目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多