In manchen Fällen kann es notwendig sein, Instanzen eines generischen Typs dynamisch zu erstellen, basierend auf einem zur Laufzeit bestimmten Typ. Dies kann eine Herausforderung sein, da generische Typen normalerweise zur Kompilierungszeit definiert werden.
Eine Möglichkeit, dies zu erreichen, besteht darin, Reflexion zu nutzen. Hier ist eine Problemumgehung, mit der Sie eine generische Typinstanz mithilfe einer Variablen erstellen können, die den Zieltyp enthält:
<code class="language-csharp">Type k = typeof(double); Type genericListType = typeof(List<>); // 注意这里<> var specificListType = genericListType.MakeGenericType(k); var list = Activator.CreateInstance(specificListType);</code>
MakeGenericType
-Methode akzeptiert einen einzelnen Type
-Parameter und gibt ein neues Type
-Objekt zurück, das einen generischen Typ mit dem angegebenen Typparameter darstellt. In diesem Fall übergeben wir double
von Type
, um den Zieltyp anzugeben.
Nachdem wir den spezifischen generischen Typ erhalten haben, können wir die Methode Activator.CreateInstance
verwenden, um ein Objekt dieses Typs zu instanziieren. Diese Methode verwendet Reflektion, um dynamisch eine neue Instanz des angegebenen Objekttyps zu erstellen.
Mit diesem Ansatz können Sie dynamisch Instanzen generischer Typen basierend auf zur Laufzeit ermittelten Typen erstellen, was eine größere Flexibilität und Codeanpassungsfähigkeit ermöglicht. Beachten Sie, dass typeof(List)
in typeof(List<>)
geändert werden muss, um den generischen Typ List<T>
korrekt darzustellen.
Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit dynamisch eine generische Typinstanz erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!