Heim >Backend-Entwicklung >C++ >Wie rufe ich mithilfe von Reflection generische Methoden mit dynamischen Typargumenten in C# auf?

Wie rufe ich mithilfe von Reflection generische Methoden mit dynamischen Typargumenten in C# auf?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 14:19:40752Durchsuche

How to Invoke Generic Methods with Dynamic Type Arguments in C# using Reflection?

Aufrufen generischer Methoden mit dynamischen Typargumenten

In C# erfordert das Aufrufen generischer Methoden mit Typargumenten, die erst zur Ausführungszeit bekannt sind, die Nutzung von Reflexionsfunktionen. Die ursprüngliche Herausforderung bestand darin, Schnittstellen in einem bestimmten Namespace zu durchlaufen und eine generische Methode aufzurufen, die diese Schnittstellen als Argumente verwendet.

Um dieses Problem zu lösen, führen Sie die folgenden Schritte aus:

  1. Suchen Sie die Generische Methode:Verwenden Sie Type.GetMethod, um die generischen Methodeninformationen abzurufen.
  2. Erstellen Sie die Methode Generisch: Verwenden Sie MakeGenericMethod, um eine spezielle Version der generischen Methode für den gewünschten Typ zu erstellen.
  3. Methode aufrufen: Rufen Sie Invoke für die generierte Methode auf, um sie auszuführen.

Betrachten Sie zum Beispiel den folgenden Code:

// Get the generic method
MethodInfo method = typeof(Test).GetMethod("CallMe");

// Get the list of interfaces in the specified namespace
var types = typeof(Test).Assembly
    .GetTypes()
    .Where(t => t.Namespace == "Interfaces");

// Loop through the interfaces
foreach (Type type in types)
{
    // Create a specialized generic method
    MethodInfo genericMethod = method.MakeGenericMethod(type);

    // Invoke the method with no target or arguments
    genericMethod.Invoke(null, null);
}

In diesem Beispiel rufen wir ab Erstellen Sie mit der generischen Methode „CallMe“ spezielle Versionen für jeden Schnittstellentyp und rufen Sie sie nachdenklich auf.

Hinweis: Wenn der Schnittstellentyp, mit dem Sie es zu tun haben, selbst generisch ist, verwenden Sie MakeGenericType anstelle von MakeGenericMethod und übergeben Sie die geeignete Typargumente.

Das obige ist der detaillierte Inhalt vonWie rufe ich mithilfe von Reflection generische Methoden mit dynamischen Typargumenten in C# auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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