Sicher können Sie:
var fooList = Activator
.CreateInstance(typeof(List<>)
.MakeGenericType(Foo.GetType()));
Das Problem hier ist, dass fooList
ist vom Typ object
, also müssten Sie es immer noch auf einen "verwendbaren" Typ umwandeln. Aber wie würde dieser Typ aussehen? Da eine Datenstruktur, die das Hinzufügen und Nachschlagen unterstützt, Objekte des Typs T
(oder besser IList<>
) nicht in T
kovariant ist, können Sie keinen List<Foo>
an einen List<IFoo>
senden, wobei Foo: IFoo
. Du könntest es zu IEnumerable<T>
werfen, das in T
kovariant ist.
Wenn Sie C# 4.0 verwenden, könnten Sie auch in Betracht ziehen fooList
zu dynamic
, so dass Sie es zumindest als Liste verwenden können (z. B. hinzufügen, suchen und Objekte entfernen).
all dies bedenkt, und die Tatsache, dass Sie haben keine Kompilierung-Typen Sicherheit, wenn ohnehin Typen zur Laufzeit erstellen, einfach ein List<object>
verwendet, ist wahrscheinlich die beste/pragmatische Art und Weise in diesem Fall zu gehen.
Anything stoping Sie einfach erstellen eine 'Liste
@ Flynn1179, lassen Sie mich sehen, wie Sie das bitte tun. – xport
'Liste