«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как LINQ может эффективно найти все производные типы указанного базового типа?

Как LINQ может эффективно найти все производные типы указанного базового типа?

Опубликовано в 2025-03-23
Просматривать:141

How Can LINQ Efficiently Find All Derived Types of a Specified Base Type?

поиск производных типов указанного типа

В программировании часто необходимо определить все производные типы данного базового типа. Традиционно это было достигнуто с помощью трудоемких методов, таких как итерация по всем типам в загруженных сборках и проверка вручную для назначения целевого типа.

Однако более эффективное и элегантное решение существует с использованием LINQ (языковой интегрированный запрос). Следующий фрагмент кода обеспечивает простой и исполнительный способ выполнения этой задачи:

var listOfDerivedTypes = (
                from domainAssembly in AppDomain.CurrentDomain.GetAssemblies()
                from type in domainAssembly.GetTypes()
                where typeof(BaseTypeName).IsAssignableFrom(type)
                select type).ToArray();

альтернативный синтаксис беглости:

выражение LINQ также можно записать в более свободном стиле для улучшенной читаемости:

var listOfDerivedTypes = AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(domainAssembly => domainAssembly.GetTypes())
                .Where(type => typeof(BaseTypeName).IsAssignableFrom(type))
                .ToArray();

настройки:

  • только общедоступные типы: для получения только типов, которые общедоступны, используйте domainassembly.getexportedtypes (). domainassembly.gettypes ().
  • исключить оригинальный базовый класс: , чтобы предотвратить исходный базовый тип из -за включения в результаты, добавить && type! = typeof (basetypename) в пункт «где»
  • exculate Abstract Abstract Classes:
  • ]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3