Natürlich sollten Sie hier keine Typsicherheit erwarten, da die resultierende Liste zum Zeitpunkt der Kompilierung vom Typ object
ist. Die Verwendung von List<object>
wäre praktischer, aber immer noch eine eingeschränkte Typsicherheit, da der Typ von Foo
nur zur Laufzeit bekannt ist.
Sicher kannst du:
%Vor% Das Problem hier ist, dass fooList
vom Typ object
ist, also müssten Sie es immer noch in einen "verwendbaren" Typ umwandeln. Aber wie würde dieser Typ aussehen? Als Datenstruktur, die das Hinzufügen und Nachschlagen von Objekten vom Typ T
List<T>
(oder besser IList<>
) unterstützt, ist keine Kovariante in T
vorhanden, sodass Sie List<Foo>
nicht auf List<IFoo>
und Foo: IFoo
umwandeln können. Sie könnten es in ein IEnumerable<T>
umwandeln, das in T
kovariant ist.
Wenn Sie C # 4.0 verwenden, können Sie auch fooList
auf dynamic
anwenden, damit Sie es zumindest als Liste verwenden können (z. B. Objekte hinzufügen, suchen und entfernen).
Angesichts all dieser Tatsache und der Tatsache, dass Sie beim Erstellen von Typen zur Laufzeit sowieso keine Art der Kompilierungssicherheit haben, ist die Verwendung von List<object>
wahrscheinlich die beste / pragmatischste Methode in diesem Fall.
In etwa so:
Activator.CreateInstance (typeof (Liste & lt; & gt;). MakeGenericType (Typ))
Tags und Links c#