属于泛型类型

本文关键字:泛型类型 属于 | 更新日期: 2023-09-27 18:28:03

我有一个IRoot的层次结构接口,其中H是层次结构类型,N是节点类型。我想弄清楚一个对象是否是IRoot类型,我该怎么做。。。

我已经查看了类型匹配、反射接口和isassignedfrom,所有这些都不起作用

属于泛型类型

单向:

var ifc = obj.GetType().GetInterface(typeof(IRoot<,>).Name);
if(ifc != null) {
    // operate assuming type is IRoot<,>
}

请确保阅读有关GetInterface()的文档并打开泛型类型。这是很奇怪的事情,所以了解这里发生了什么很重要。

EDIT:您也可以使用typeof(IRoot<,>).Name来代替"IRoot`2",以避免必须使用硬编码字符串。我已经更新了上面的代码来做到这一点。

除了siride的答案:

如果您可以更改IRoot<H, N>的定义,使其为IRoot<H,N> : IRoot,那么以下内容也将起作用:

object someInstance = new SomeDerivedClass<TFoo, TBar>();
bool isOfRoot = typeof (IRoot).IsInstanceOfType(someInstance);

甚至

bool isOfRoot = someInstance is IRoot;

这使得它的类型更加安全,因为不涉及字符串。