在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中的内容吗?我是否被迫通过扩展方法滚动自己?
答案 0 :(得分:3)
使用Type.IsAssignableFrom(Type)