Pewnie można:
var fooList = Activator
.CreateInstance(typeof(List<>)
.MakeGenericType(Foo.GetType()));
Problem tutaj jest to, że fooList
typu object
, więc nadal musisz go rzucić w typ "użyteczny". Ale jak wyglądałby ten typ? Ponieważ struktura danych obsługująca dodawanie i wyszukiwanie obiektów typu T
List<T>
(lub raczej IList<>
) nie jest kowariantna w T
, więc nie można przesłać List<Foo>
do List<IFoo>
, gdzie Foo: IFoo
. Możesz rzucić go do IEnumerable<T>
, który jest kowariancyjny w T
.
Jeśli używasz C# 4.0, możesz również rozważyć przesłanie fooList
do dynamic
, dzięki czemu możesz przynajmniej użyć go jako listy (np. Dodawać, wyszukiwać i usuwać obiekty).
Biorąc pod uwagę to wszystko i fakt, że nie masz żadnego rodzaju bezpieczeństwa podczas tworzenia typów w czasie wykonywania, po prostu użycie List<object>
jest prawdopodobnie najlepszym/najbardziej pragmatycznym sposobem postępowania w tym przypadku.
Coś, co powstrzymuje cię po prostu tworząc 'List
@ Flynn1179, daj mi zobaczyć, jak to robisz, proszę. – xport
'List