Список <> динамически создаваемой структуры - PullRequest
2 голосов
/ 18 декабря 2009

В C # я хочу создать список на основе динамического типа значения, например:

void Function1() {

  TypeBuilder tb = ....   // tb is a value type
  ...
  Type myType = tb.CreateType();
  List<myType> myTable = new List<myType>();
}

void Function2(Type myType)
{
  List<myType> myTable = new List<myType>();
}

Это не завершится, потому что List <> требует статически определенного имени типа. Есть ли способ обойти это?

Ответы [ 2 ]

4 голосов
/ 18 декабря 2009

Вы можете создать строго типизированный список во время выполнения через рефлексию, хотя вы можете получить к нему доступ только через неуниверсальный интерфейс IList

IList myTable = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(new[] { myType }));
2 голосов
/ 18 декабря 2009

Вы должны будете использовать отражение, чтобы создать список:

Type listType = typeof(List<>);
Type concreteType = listType.MakeGenericType(myType);

IList list = Activator.CreateInstance(concreteType) as IList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...