如何在基类库中找到实现特定接口的类型列表?

时间:2011-03-22 21:59:41

标签: .net base-class-library

有时我想查找实现特定接口的所有标准.NET类型的列表。通常是出于好奇,有时也有一些实际目的(但这不是重点)。

我试图从MSDN中获取它,但是类型的页面只包含类型的子类,而不是实现接口的类型。

你知道如何做到这一点的技巧(或一个有用的工具)?

我写了这段代码(ICollection是被调查的类型):

        var result =
            from assembly in AppDomain.CurrentDomain.GetAssemblies().ToList()
            from type in assembly.GetTypes()
            where typeof(ICollection).IsAssignableFrom(type)
            select type;

        foreach (var type in result)
        {
            Console.Out.WriteLine(type.FullName);
        }

但这有一些局限性:

  1. 它仅搜索当前加载的程序集。
  2. 我无法找到为通用接口执行此操作的方法(ICollection<>无效)。
  3. 如果它提供了到MSDN的链接会很好(但我猜这可以修复)。
  4. 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

  

它仅搜索当前加载的内容   组件。

始终存在“添加引用”对话框,但您可能希望查看问题:List all available .NET assemblies

  

我无法想办法做到这一点   对于通用接口(ICollection&lt;&gt;   不会起作用)

请尝试此查询:

from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.GetInterfaces()
          .Any(i => i.IsGenericType
                 && i.GetGenericTypeDefinition() == typeof(ICollection<>))
select type;
  

如果提供链接会很好   到MSDN。

.NET Reflector支持搜索实现接口的类型(在类型下选择“派生类型”)以及在MSDN上搜索类型的文档(右键单击类型并选择“搜索MSDN”)。

如果您不喜欢该选项,您当然可以尝试使用类型的完全限定名称编写在MSDN上运行Web搜索的内容。我不知道是否有任何元数据将类型映射到其MSDN页面或完成它的干净方式。