属于泛型类型
本文关键字:泛型类型 属于 | 更新日期: 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;
这使得它的类型更加安全,因为不涉及字符串。