Erstellen einer generischen <T> -Typinstanz mit einer Variablen, die den Typ enthält


84

Ist es möglich, den folgenden Code zu erreichen? Ich weiß, dass es nicht funktioniert, aber ich frage mich, ob es eine Problemumgehung gibt.

Type k = typeof(double);
List<k> lst = new List<k>();

Etwas verwirrt von Ihrem Kommentar "Dies kann in C # 4.0 erreicht werden." Es kann nicht, zumindest nicht so, wie Sie es zeigen. Für C # 4 müssen weiterhin generische Typparameter zur Kompilierungszeit angegeben werden. Sie können eine Typvariable immer noch nicht als generischen Typparameter übergeben.
Itowlson

1
Bitte formulieren Sie Dinge als Frage, wenn es sich um eine Frage handelt. Der angegebene Code kann mit C # 4.0 nicht ausgeführt werden.
Lasse V. Karlsen


Entschuldigung für die C # 4.0-Sache. Ich meinte, dass die Antwort Konzepte in C # 4.0 verwenden könnte, nicht unbedingt, dass der Code in C # 4.0 funktionieren würde. Danke für die Bearbeitung von DrJokepu.
Chris

12
Ich denke, diese Frage ist perfekt gestellt - genau die richtige Menge an Details!
RunHolt

Antworten:


118

Ja da ist:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);

Ich denke das ist was ich will. Lassen Sie mich das noch einmal überprüfen und ich werde Ihre für einen Moment als Antwort markieren.
Chris

3
Ich denke , das Hauptproblem hier ist , dass man nicht beschreiben , was Sie wollen uns . Sie zeigen uns , einen gescheiterten Versuch, etwas , und dann fragt , wie zu erreichen , was Sie wollen . Wenn Sie Antworten und keine Vermutungen wünschen, sollten Sie beschreiben, was Sie tun müssen, anstatt wie Sie es versucht haben.
Lasse V. Karlsen

Grundsätzlich möchte ich eine Liste <> erstellen, in der der Typ als Typvariable angegeben ist.
Chris

3
Danke David M, Ihr Code macht genau das, was ich brauchte. Entschuldigen Sie diejenigen, die nicht antworten konnten, weil ich keine angemessene Frage gestellt habe.
Chris

Ist es möglich, den Sameway für generische Methoden durchzuführen? Ich muss den dynamischen Typ für die Methode übergeben. Ich habe mein Problem auf dem folgenden Link veröffentlicht. stackoverflow.com/questions/4101784/…
Mathiyazhagan

3

Ein sauberer Weg könnte darin bestehen, eine generische Methode zu verwenden. Mach so etwas:

static void AddType<T>()
    where T : DataObject
{
    Indexes.Add(typeof(T), new Dictionary<int, T>());
}

Ich bin mir nicht sicher, was Sie unter "Indizes" verstehen. Ist das eine Variable, die an anderer Stelle deklariert wurde?
jrh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.