2015-05-01 43 views
5

我测试的对象是这样的:是否有可能看到一个对象是否继承IDictionary而不使用泛型类型参数?

if (item is IDictionary<object, object>) 

但是,这并不符合所有类型<sting, object>, <int, string>等其他组合的...

我只是想知道,如果它已经实现的接口,无论它使用的是什么泛型类型。

我发现了一个例子说,这是有可能做这样的事情:

dictionary.GetType().GetInterfaces().Any(x => x.GetGenericTypeDefinition == typeof(IDictionary<>)); 

但我还是要指定类型的签名,或者它是无效的。

是否有可能做一个语句来检查接口而不必指定类型?

+0

根据你的最终需求,如果你想知道你是否有字典而不是特定的IDictionary ,你可以检查非泛型的IDictionary,而不是字典也实现。这个解决方案将取决于你的使用案例。 –

回答

7

你靠近,你真的只需要修复了语法:

dictionary.GetType().GetInterfaces().Any(x => x.GetGenericTypeDefinition() == typeof(IDictionary<,>)) 

注GetGenericTypeDefinition后(),和<>内的逗号。

+0

Ahhrg。我一直盯着这个这么长时间,我没有看到它。谢谢! – Guerrilla

相关问题