Maison >développement back-end >C++ >Comment puis-je invoquer des méthodes génériques en C # avec des paramètres de type dynamique à l'exécution?

Comment puis-je invoquer des méthodes génériques en C # avec des paramètres de type dynamique à l'exécution?

Susan Sarandon
Susan Sarandonoriginal
2025-02-03 07:52:11906parcourir

How Can I Invoke Generic Methods in C# with Dynamic Type Parameters at Runtime?

C # Exécutez le paramètre de type dynamique de la méthode générique Scrang

Lorsque vous utilisez des méthodes génériques en C #, les paramètres de type sont parfois inconnus lors de la compilation et doivent être obtenus au moment de l'exécution. Cet article traite de la meilleure pratique d'appeler la méthode générique dans ce cas.

Considérons les exemples de code suivants, où

Méthodes Essayez d'utiliser les paramètres de type obtenus à partir des variables d'exécution

pour appeler la méthode générique Example. myType GenericMethod<T>

Comme indiqué dans l'exemple, essayez d'appeler directement
<code class="language-csharp">public class Sample
{
    public void Example(string typeName)
    {
        Type myType = FindType(typeName);
        GenericMethod<myType>(); // 这行代码无法编译通过
        StaticMethod<myType>(); // 这行代码也无法编译通过
    }

    public void GenericMethod<T>()
    {
        // ...
    }

    public static void StaticMethod<T>()
    {
        // ...
    }
}</code>
, car le compilateur ne peut pas déduire le paramètre de type pendant la compilation. Pour résoudre ce problème, nous devons utiliser la réflexion pour obtenir des méthodes, puis utiliser les paramètres de type requis pour le "construire".

GenericMethod<myType>

Méthode pour récupérer la méthode à partir du type de courant, et
<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);</code>
Utilisez le paramètre de type spécifié pour construire la spécification de la méthode générique. Enfin, est utilisé pour appeler la méthode générique du constructeur.

GetMethod pour les méthodes statiques, MakeGenericMethod a passé Invoke comme premier paramètre à

. Cela n'a rien à voir avec la méthode générique, mais ne reflète que la méthode d'appel de la méthode statique par la réflexion.

null En C # 4 et des versions supérieures, si l'inférence du type est possible, les appels dynamiques peuvent être utilisés pour simplifier davantage ce processus, mais ce n'est pas toujours le cas. La solution fournie par réflexion est toujours une méthode fiable pour appeler la méthode générique à l'aide de paramètres de type dynamique. Invoke

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!

Déclaration:
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