Heim > Backend-Entwicklung > C++ > Wie kann ich generische Methoden mit laufzeitbestimmten Typargumenten in C# dynamisch aufrufen?

Wie kann ich generische Methoden mit laufzeitbestimmten Typargumenten in C# dynamisch aufrufen?

Barbara Streisand
Freigeben: 2024-12-30 19:09:13
Original
618 Leute haben es durchsucht

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

Aufrufen generischer Methoden mit dynamischen Typargumenten

Problem

In Ihrem Szenario möchten Sie eine Sammlung von Schnittstellen in einem bestimmten Namespace durchlaufen und Rufen Sie für jede Schnittstelle dynamisch eine generische Methode auf. Aufgrund der unbekannten Typargumente zur Kompilierungszeit treten jedoch Fehler bei der Kompilierung auf.

Lösung

Um generische Methoden mit zur Laufzeit bekannten Typargumenten dynamisch aufzurufen, können Sie Reflektion wie folgt verwenden:

  1. Informationen zur generischen Methode abrufen: Verwenden Sie die Type.GetMethod-Methode, um die generische Methode abzurufen Definition.
  2. Generieren Sie die generische Methodeninstanz: Rufen Sie die MakeGenericMethod-Methode für die generische Methodendefinition auf, um die spezifische Methodeninstanz für das gewünschte Typargument zu generieren.
  3. Rufen Sie die generische Methodeninstanz auf: Verwenden Sie die Invoke-Methode, um die generierte generische Methodeninstanz mit den erforderlichen aufzurufen Argumente.

Beispielcode

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
        }
    }
}
Nach dem Login kopieren

In diesem Beispiel:

  • Die CallGeneric-Methode ist als generische Methode definiert, die das generische Typargument ausgibt .
  • Wir rufen alle Typen aus einem bestimmten Namespace ab, von dem sie erben MyNamespace.Interfaces.
  • Wir verwenden Reflektion, um die generische Methode CallGeneric zu erhalten und eine generische Methodeninstanz für jeden Schnittstellentyp zu erstellen.
  • Wir rufen die generische Methodeninstanz ohne Ziel oder Argumente auf, da es sich um eine handelt statische Methode ohne Parameter.

Das obige ist der detaillierte Inhalt vonWie kann ich generische Methoden mit laufzeitbestimmten Typargumenten in C# dynamisch aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage