Heim > Backend-Entwicklung > C++ > Wie kann ich generische Typen in C# mithilfe von Typvariablen instanziieren?

Wie kann ich generische Typen in C# mithilfe von Typvariablen instanziieren?

Barbara Streisand
Freigeben: 2025-01-13 07:29:11
Original
701 Leute haben es durchsucht

How Can I Instantiate Generic Types in C# Using Type Variables?

Erstellen Sie eine generische Typinstanz mit einer Variablen des enthaltenden Typs

In C# mag es kontraintuitiv erscheinen, dass Sie einen generischen Typ nicht direkt mithilfe einer Variablen des enthaltenden Typs instanziieren können. Der folgende Code veranschaulicht das Problem:

<code class="language-c#">Type k = typeof(double);
List<k> lst = new List<k>(); // 编译错误</code>
Nach dem Login kopieren

Dieser Code lässt sich nicht kompilieren, da er versucht, die Variable k zur Angabe eines generischen Typs zu verwenden. Es gibt jedoch einen Workaround, mit dem sich die gewünschte Funktionalität erreichen lässt.

Um eine generische Typinstanz mit einer Variablen des enthaltenden Typs zu erstellen, können Sie Reflection und Activator.CreateInstance() nutzen:

<code class="language-c#">var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);</code>
Nach dem Login kopieren

Dieser Code funktioniert folgendermaßen:

  1. genericListType Ruft die generische List<>-Typdefinition ab.
  2. MakeGenericType() ruft die generische Typdefinition ab und gibt die tatsächlichen Typparameter an (double in diesem Fall).
  3. Activator.CreateInstance() Instanziiert einen bestimmten generischen Typ mithilfe der angegebenen Typparameter.

Das obige ist der detaillierte Inhalt vonWie kann ich generische Typen in C# mithilfe von Typvariablen instanziieren?. 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