Maison > développement back-end > C++ > Comment puis-je appeler dynamiquement des méthodes génériques avec des arguments de type déterminés par l'exécution en C# ?

Comment puis-je appeler dynamiquement des méthodes génériques avec des arguments de type déterminés par l'exécution en C# ?

Barbara Streisand
Libérer: 2024-12-30 19:09:13
original
618 Les gens l'ont consulté

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

Appel de méthodes génériques avec des arguments de type dynamique

Problème

Dans votre scénario, vous souhaitez parcourir une collection d'interfaces dans un espace de noms spécifique et invoquez dynamiquement une méthode générique pour chaque interface. Cependant, vous rencontrez des erreurs de compilation en raison d'arguments de type inconnus au moment de la compilation.

Solution

Pour appeler dynamiquement des méthodes génériques avec des arguments de type connus à l'exécution, vous pouvez utiliser la réflexion comme suit :

  1. Obtenir les informations sur la méthode générique : Utilisez la méthode Type.GetMethod pour récupérer la méthode générique définition.
  2. Générer l'instance de méthode générique : Appelez la méthode MakeGenericMethod sur la définition de méthode générique pour générer l'instance de méthode spécifique pour l'argument de type souhaité.
  3. Invoquer l'instance de méthode générique : utilisez la méthode Invoke pour invoquer l'instance de méthode générique générée avec les éléments requis arguments.

Exemple de code

using System;
using System.Linq;
using System.Reflection;

public class TestClass
{
    public static void CallGeneric<T>()
    {
        Console.WriteLine($"Generic type: {typeof(T)}");
    }

    public static void Main()
    {
        var assembly = Assembly.GetExecutingAssembly();

        var interfaces = assembly.GetTypes()
            .Where(t => t.Namespace == "MyNamespace.Interfaces");

        var genericMethod = typeof(TestClass).GetMethod("CallGeneric");

        foreach (var interfaceType in interfaces)
        {
            var genericMethodInstance = genericMethod.MakeGenericMethod(interfaceType);
            genericMethodInstance.Invoke(null, null); // No target or arguments needed
        }
    }
}
Copier après la connexion

Dans cet exemple :

  • La méthode CallGeneric est définie comme une méthode générique qui imprime l'argument de type générique .
  • Nous récupérons tous les types d'un espace de noms spécifique qui hérite de MyNamespace.Interfaces.
  • Nous utilisons la réflexion pour obtenir la méthode générique CallGeneric et créons une instance de méthode générique pour chaque type d'interface.
  • Nous invoquons l'instance de méthode générique sans aucune cible ni argument puisqu'il s'agit d'un méthode statique sans aucun paramètre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal