我有一个IRoot的层次结构接口,其中H是层次结构类型,N是节点类型。我想工作的对象是否是类型IRoot的,我会怎么做这个...是泛型类型
我看过的匹配类型反射接口和isassignedfrom,所有不工作
我有一个IRoot的层次结构接口,其中H是层次结构类型,N是节点类型。我想工作的对象是否是类型IRoot的,我会怎么做这个...是泛型类型
我看过的匹配类型反射接口和isassignedfrom,所有不工作
方式一:
var ifc = obj.GetType().GetInterface(typeof(IRoot<,>).Name);
if(ifc != null) {
// operate assuming type is IRoot<,>
}
请务必阅读关于GetInterface()
的文档并打开泛型类型。这很奇怪,所以了解这里发生的事情很重要。
编辑:您也可以使用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;
这使得它更安全一些,因为不涉及任何字符串。
你能告诉我们一些代码吗? – 2012-03-17 16:00:43
你可以发布你到目前为止的代码吗?这并不完全清楚你想要做什么。 – 2012-03-17 16:00:48
有一个'IRoot',你想看看一个对象是否实现了这个,而不管'H'和'N'的选择是什么? –
Jon
2012-03-17 16:03:35