Как узнать список типов в библиотеке базовых классов, которые реализуют определенный интерфейс? - PullRequest
3 голосов
/ 23 марта 2011

Иногда я хочу узнать список всех стандартных типов .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 (но я думаю, что это можно исправить).

Спасибо за помощь!

1 Ответ

2 голосов
/ 23 марта 2011

Он ищет только загруженные в данный момент сборки.

Всегда есть диалоговое окно «Добавить ссылку», но вы можете посмотреть на вопрос: Список всех доступных сборок .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, или простой способ сделать это.

...