Heim >Backend-Entwicklung >C++ >Wie kann ich generische Methoden in C# mit dynamischen Typparametern zur Laufzeit aufrufen?

Wie kann ich generische Methoden in C# mit dynamischen Typparametern zur Laufzeit aufrufen?

Susan Sarandon
Susan SarandonOriginal
2025-02-03 07:52:11903Durchsuche

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

c#Führen Sie den Parameter Dynamischer Typ der generischen Scrang -Methode

aus Bei Verwendung generischer Methoden in C#sind manchmal die Typparameter beim Kompilieren unbekannt und müssen zur Laufzeit erhalten werden. In diesem Artikel wird die beste Praxis erörtert, die in diesem Fall die generische Methode aufzurufen.

Betrachten Sie die folgenden Codebeispiele, in denen

Methoden versuchen, die von Laufzeitvariablen erhaltenen Typparameter zu verwenden.

Example myType Wie im Beispiel gezeigt, versuchen Sie, GenericMethod<T> direkt aufzurufen, da der Compiler den Typ -Parameter während der Kompilierung nicht schließen kann. Um dieses Problem zu lösen, müssen wir Reflexion verwenden, um Methoden zu erhalten, und dann die erforderlichen Typparameter zum "Konstruktion" verwenden.

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

Methode zum Abrufen der Methode aus dem Stromtyp und GenericMethod<myType> Verwenden Sie den angegebenen Typparameter, um die generische Methodenspezifikation zu konstruieren. Schließlich wird verwendet, um die generische Methode des Konstruktors aufzurufen.

<code class="language-csharp">MethodInfo method = typeof(Sample).GetMethod(nameof(Sample.GenericMethod));
MethodInfo generic = method.MakeGenericMethod(myType);
generic.Invoke(this, null);</code>
Für statische Methoden bestanden

GetMethod als erster Parameter an MakeGenericMethod. Dies hat nichts mit der generischen Methode zu tun, sondern spiegelt nur die Methode zum Aufrufen der statischen Methode durch Reflexion wider. Invoke

In C# 4 und höhere Versionen können dynamische Aufrufe verwendet werden, um diesen Prozess weiter zu vereinfachen, wenn Typinferenz möglich ist, aber dies ist nicht immer der Fall. Die durch Reflexion bereitgestellte Lösung ist nach wie vor eine zuverlässige Methode zum Aufrufen der generischen Methode mithilfe dynamischer Typparameter.

Das obige ist der detaillierte Inhalt vonWie kann ich generische Methoden in C# mit dynamischen Typparametern zur Laufzeit aufrufen?. 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