对于反射泛型类型,“is”运算符的等价物是什么?

时间:2015-02-25 03:54:09

标签: c# reflection

在C#中使用泛型类型的is运算符非常简单:

if (new List<MyClass>()) is IEnumerable<MyClass>) {
    // always branches
}

但比较类型时怎么样?我希望我可以在这里使用Type.IsSubclassOf(Type type),但System.Collections.Generic.List<> 实现 System.Collections.Generic.IEnumerable<> - 它不会扩展它。所以我认为这就是为什么会发生以下情况:

var listType = typeof(List<MyClass>);
var enumerableType = typeof(IEnumerable<MyClass>);

if (listType.IsSubclassOf(enumerableType)) {
    // NEVER branches
}

如果我有一个我的右值Type的实例,我可以轻松使用Type.IsInstanceOfType(object o),但代码中的这一点远离有问题Type所反映的实例

我错过了Type API中的内容吗?我是否被迫通过扩展方法滚动自己?

1 个答案:

答案 0 :(得分:3)

使用Type.IsAssignableFrom(Type)