Generische C#-Methode: flexible Verwendung variabler Typparameter
Bei der Verwendung generischer Methoden in C#, wie z. B. DoesEntityExist<T>
(wobei T einen Typ darstellt, der der IGloballyIdentifiable-Schnittstelle entspricht), können Probleme bei der Kompilierung auftreten, wenn Sie versuchen, Variablentypen zur dynamischen Angabe generischer Typparameter (z. B als Type t = entity.GetType();
) Fehler. Dies liegt daran, dass C#-Generika erfordern, dass Typinformationen zur Kompilierungszeit bekannt sind.
Verwenden Sie den Reflexionsmechanismus
Um diese Einschränkung zu überwinden, kann ein Reflexionsmechanismus verwendet werden. Bei dieser Technik werden die Methoden „GetMethod“ und „MakeGenericMethod“ für das MethodInfo-Objekt aufgerufen, das der generischen Methode zugeordnet ist. Dadurch können Sie einen Typparameter dynamisch bereitstellen, auch wenn dieser erst zur Laufzeit bekannt ist.
<code class="language-csharp">MethodInfo method = GetType().GetMethod("DoesEntityExist") .MakeGenericMethod(new Type[] { t }); method.Invoke(this, new object[] { entityGuid, transaction });</code>
Methodengenerizität verbessern
Ein anderer Ansatz besteht darin, die aufrufende Methode selbst zu ändern, um sie zu einer generischen Methode zu machen, sodass Sie die erforderlichen Typparameter als Parameter übergeben können. Dadurch wird die Typauswahlentscheidung auf eine höhere Ebene gehoben und nachfolgende Methodenaufrufe vereinfacht.
Zusätzliche Erklärung
Um eine spezifischere Anleitung zu geben, ist es am besten, kontextbezogenere Informationen zum Problem bereitzustellen. Manchmal kann die Verwendung von Reflection notwendig sein, aber eine strategische Planung der Verwendung eines generischen Typs kann dessen Wiederverwendung minimieren. Durch die sorgfältige Auswahl des Reflexionszeitpunkts können Sie sicherstellen, dass Typparameter nur einmal dynamisch angegeben werden, sodass nachgelagerter Code sie nahtlos verwenden kann.
Das obige ist der detaillierte Inhalt vonWie kann ich generische Typargumente in generischen C#-Methoden dynamisch angeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!