Heim >Backend-Entwicklung >C++ >Wie kann ich generische Methoden in C# mit dynamischen Typparametern zur Laufzeit aufrufen?
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
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!