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
Barbara StreisandOriginal
2025-01-13 07:29:11704Durchsuche

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>

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>

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!

Stellungnahme:
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