C # Невозможно создать экземпляр, потому что Type.ContainsGenericParameters имеет значение true - PullRequest
9 голосов
/ 17 марта 2011

Я пытаюсь десериализовать Generic<T> where T : struct, но когда я вызываю ctor.Invoke(args);, я получаю исключение «Невозможно создать экземпляр, поскольку Type.ContainsGenericParameters имеет значение true».

Как передать универсальный тип, которым я хочу?

Ответы [ 3 ]

11 голосов
/ 17 марта 2011

Type.MakeGenericType это, вероятно, то, что вы ищете ...

3 голосов
/ 17 марта 2011

Сначала необходимо создать конкретный тип, используя метод MakeGenericType для общего типа

2 голосов
/ 18 июня 2018

Допустим, у вас есть Type t универсального класса, который имеет конструктор без параметров, и массив типов для использования в качестве параметров типа универсального класса:

Type t = someType;
Type[] genericTypeParameters = someArrayOfTypeParameters;

Звоните Type.MakeGenericType(), что

Подставляет элементы массива типов для параметров типа текущего определения универсального типа и возвращает объект типа представляющий результирующий ... тип

Затем создайте объект как обычно:

    t = t.MakeGenericType(genericTypeParameters);

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