"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como o LINQ pode encontrar com eficiência todos os tipos derivados de um tipo de base especificado?

Como o LINQ pode encontrar com eficiência todos os tipos derivados de um tipo de base especificado?

Postado em 2025-03-23
Navegar:616

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

encontrando tipos derivados de um tipo especificado

Na programação, geralmente é necessário determinar todos os tipos derivados de um determinado tipo base. Tradicionalmente, isso foi alcançado através de técnicas trabalhosas, como iteração de todos os tipos em montagens carregadas e verificando manualmente a atribuibilidade ao tipo de destino. O snippet de código a seguir fornece uma maneira direta e executiva de realizar esta tarefa:

var listOfDerivedTypes = ( do domainassembly em appDomain.CurrentDomain.getAssemblies () do tipo em domainassembly.gettypes () onde tipeof (basetypeName) .isassignablefrom (type) select type).ToArray();

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

The LINQ expression can also be written in a more fluent style for enhanced readability:

var listOfDerivedTypes = AppDomain.CurrentDomain.GetAssemblies() .SELECTMANY (DOMAINASTEMBLY => DOMAINAINMEMBLY.GETTYPES ()) . Onde (tipo => typeof (basetypeName) .isassignablefrom (type)) .TOArray ();

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

    apenas tipos publicados visíveis:
  • para recuperar apenas tipos que são visíveis publicamente, use domainesa domainAssembly.getTypes ().
  • exclua a classe base original:
  • para impedir que o tipo de base original seja incluído nos resultados, add && type! type.isabstract para a cláusula where.
  • tipos genéricos:
  • lidar com tipos genéricos requer considerações adicionais. Para orientação, consulte os recursos vinculados na seção "Detalhes".
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3