Variablentypen als Parameter in generischen C#-Methoden verwenden
Generika in C# bieten eine Möglichkeit, flexible Methoden und Klassen zu erstellen, die mit verschiedenen Datentypen arbeiten können, ohne dass für jeden Typ separate Implementierungen implementiert werden müssen. Allerdings kann die Verwendung des Typs einer Variablen als Parameter in einer generischen Methode eine Herausforderung sein, insbesondere wenn der Typ zum Zeitpunkt der Kompilierung nicht bekannt ist.
Betrachten Sie die folgende generische Methode:
<code class="language-csharp">bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;</code>
Diese Methode prüft anhand ihrer GUID und Transaktion, ob eine Entität existiert. Um diese Methode verwenden zu können, muss der Typ der Entität zur Kompilierungszeit bekannt sein. Dies geschieht normalerweise durch die explizite Angabe der Typparameter beim Aufruf der Methode, etwa so:
<code class="language-csharp">DoesEntityExist<MyType>(entityGuid, transaction);</code>
Wir können die obige Methode jedoch nicht verwenden, wenn der Typ der Entität erst zur Laufzeit bekannt ist. Der Versuch, diese Methode mit einer Variablen vom Typ Type aufzurufen, führt zu einem Compilerfehler:
<code>找不到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)</code>
Um dieses Problem zu lösen, können wir Reflektion verwenden, um die generische Methode mit den erforderlichen Typparametern aufzurufen. So können wir das machen:
<code class="language-csharp">Type t = entity.GetType(); MethodInfo method = GetType().GetMethod("DoesEntityExist") .MakeGenericMethod(new Type[] { t }); method.Invoke(this, new object[] { entityGuid, transaction });</code>
Dieser Ansatz ist jedoch weniger effizient und kann schwierig aufrechtzuerhalten sein. Daher empfiehlt es sich generell, generische Methoden so zu definieren, dass Typparameter als Argumente übergeben werden. Dies ermöglicht es uns, die Typsicherheit zur Kompilierungszeit aufrechtzuerhalten und gleichzeitig zur Laufzeit weiterhin die erforderliche dynamische Typinferenz zu verwenden.
Das obige ist der detaillierte Inhalt vonWie kann ich den Typ einer Variablen als Parameter in einer generischen C#-Methode verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!