"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 posso invocar dinamicamente métodos genéricos com argumentos do tipo determinado por tempo de execução em C#?

Como posso invocar dinamicamente métodos genéricos com argumentos do tipo determinado por tempo de execução em C#?

Postado em 2025-03-22
Navegar:697

How Can I Dynamically Invoke Generic Methods with Runtime-Determined Type Arguments in C#?

chamando métodos genéricos com argumentos de tipo dinâmico

Problem

em seu cenário, você deseja iterar através de uma coleção de interfaces em um espaço de nome específico e invocar dinamicamente um método genérico para cada interface. No entanto, você encontra erros de compilação no tempo devido aos argumentos do tipo desconhecido no momento da compilação. definição. Argumentos. usando System.Linq; usando System.Reflection; Classe pública TestClass { public static void callGeneric () { Console.WriteLine ($ "Tipo genérico: {typeof (t)}"); } public static void main () { var mase = Assembly.GetexecutingAssEMMBLY (); var interfaces = Assembly.getTypes () . Onde (t => t.namespace == "myNamespace.interfaces"); var genéricoMethod = typeOf (testClass) .getMethod ("callGeneric"); foreach (var interfacetype em interfaces) { var genéricoMethodInstance = genericmethod.MakeGenericMethod (interfacetype); genéricoMethodInstance.invoke (nulo, nulo); // sem alvo ou argumentos necessários } } }

Neste exemplo:

O método CallGeneric é definido como um método genérico que imprime o tipo genérico argumentos. instância do método para cada tipo de interface.
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