Heim > Backend-Entwicklung > C++ > Wie kann ich den Typ einer Variablen als Parameter in einer generischen C#-Methode verwenden?

Wie kann ich den Typ einer Variablen als Parameter in einer generischen C#-Methode verwenden?

Linda Hamilton
Freigeben: 2025-01-17 20:32:10
Original
881 Leute haben es durchsucht

How Can I Use a Variable's Type as a Parameter in a C# Generic Method?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage