"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puede LINQ encontrar eficientemente todos los tipos derivados de un tipo de base especificado?

¿Cómo puede LINQ encontrar eficientemente todos los tipos derivados de un tipo de base especificado?

Publicado el 2025-03-23
Navegar:196

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

para encontrar tipos derivados de un tipo especificado

en programación, a menudo es necesario determinar todos los tipos derivados de un tipo base dado. Tradicionalmente, esto se ha logrado a través de técnicas laboriosas, como iterar sobre todos los tipos en ensamblajes cargados y verificar manualmente la asignabilidad al tipo de destino.

, sin embargo, existe una solución más eficiente y elegante utilizando LINQ (consulta integrada del lenguaje). El siguiente fragmento de código proporciona una forma directa y de rendimiento de lograr esta tarea:

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

Alternative Fluent Syntax:

La expresión de Linq también se puede escribir en un estilo más fluido para la lectura mejorada:

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

Customizations:

  • solo tipos visibles públicamente: para recuperar solo tipos que son visibles públicamente, use domainsembly.getExportedTypes () en lugar de DomaineAssembly.gettypes ().
  • Excluye la clase base original: para evitar que el tipo base original se incluya en los resultados, agregar && type! = typeOf (basetypeName) a la cláusula where.
  • classes abstract type.isabStract a la cláusula WHERE.
  • tipos genéricos: manejar tipos genéricos requiere consideraciones adicionales. Para obtener orientación, consulte los recursos vinculados en la sección "Detalles".
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3