


Wie kann ich mithilfe von Reflection in C# sicher die richtige generische Methodenüberladung auswählen?
Verwenden Sie Reflexion, um die richtige generische Methode auszuwählen
Bei der Verwendung generischer Methoden per Reflektion kann die Auswahl der richtigen Überladung schwierig sein, wenn mehrere generische Überladungen vorhanden sind. Dieses Problem tritt auf, wenn der Methodenname nicht eindeutig ist, z. B. bei der Methode „Where“ in der Klasse System.Linq.Queryable.
Anstatt sich auf Annahmen zu verlassen oder Methodennamen zu überprüfen, gibt es eine zur Kompilierungszeit sichere Möglichkeit, mithilfe von Delegaten die richtige generische Überladung auszuwählen.
Statische Methode
Betrachten Sie die folgende statische Methode mit mehreren generischen Überladungen:
public static void DoSomething<TModel>(TModel model) public static void DoSomething<TViewModel, TModel>(TViewModel viewModel, TModel model)
Um die erste Überladung (Void-Rückgabetyp, ein generischer Parameter) auszuwählen, erstellen Sie einen Operationsdelegaten, der seiner Signatur entspricht:
var method = new Action<object>(MyClass.DoSomething<object>);
Verwenden Sie für die zweite Überladung (Rückgabetyp „void“, zwei generische Parameter) einen Aktionsdelegaten mit zwei Objektparametern:
var method = new Action<object, object>(MyClass.DoSomething<object, object>);
Diese Methode wählt die richtige Überladung basierend auf der generischen Anzahl und der Argumentanzahl des Delegaten aus.
Um ein MethodInfo-Objekt zu erhalten, verwenden Sie die Method-Eigenschaft des Delegaten und rufen Sie MakeGenericMethod() auf:
var methodInfo = method.Method.MakeGenericMethod(type1, type2);
Statische Erweiterungsmethode
Verwenden Sie für Beispielmethoden eine ähnliche Methodenauswahlmethode, rufen Sie jedoch GetGenericMethodDefinition() auf, bevor Sie den Typ an MakeGenericMethod() übergeben:
var methodInfo = method.Method.GetGenericMethodDefinition().MakeGenericMethod(type1);
Methodeninfo und Parametertypen entkoppeln
Sie können ein generisches MethodInfo-Objekt erhalten, indem Sie GetGenericMethodDefinition() aufrufen und so die Auswahl der MethodInfo-Objekte von den Parametertypen entkoppeln:
var methodInfo = method.Method.GetGenericMethodDefinition();
Übergeben Sie dann die erforderlichen Typen an MakeGenericMethod(), wenn Sie die Methode aufrufen:
processCollection(methodInfo, type2); ... protected void processCollection(MethodInfo method, Type type2) { var type1 = typeof(MyDataClass); object output = method.MakeGenericMethod(type1, type2).Invoke(null, new object[] { collection }); }
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Reflection in C# sicher die richtige generische Methodenüberladung auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?
