检测类型是否实现ICollection <t> </t>

时间:2009-09-24 14:29:53

标签: c# .net vb.net reflection

我正在尝试检查类型是否实现了通用ICollection&lt; T&gt; interface,因为这是我的任何通用集合的基本接口。

以下代码不起作用

GetType(ICollection(Of)).IsAssignableFrom(
    objValue.GetType().GetGenericTypeDefinition())

检测类型是否实现通用接口的好方法是什么?

2 个答案:

答案 0 :(得分:25)

CustomCollection c = new CustomCollection();

bool implementICollection = c.GetType().GetInterfaces()
                            .Any(x => x.IsGenericType &&
                            x.GetGenericTypeDefinition() == typeof(ICollection<>));

答案 1 :(得分:1)

其他人的替代方案如下:

if (MyObject is ICollection<T>)
  ...

注意:这仅在编译时知道T时才有效。