3

有时我想找出实现特定接口的所有标准 .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 回答 1

2

它只搜索当前加载的程序集。

总是有“添加引用”对话框,但您可能想查看以下问题:列出所有可用的 .NET 程序集

我想不出一种对通用接口执行此操作的方法(ICollection<> 不起作用)

试试这个查询:

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 上使用类型的全限定名称运行网络搜索的内容。我不知道周围是否有任何元数据可以将类型映射到其 MSDN 页面或实现这一目标的干净方式。

于 2011-03-22T22:07:45.677 回答