Создайте экземпляр класса, используя тип t как отражено - PullRequest
1 голос
/ 30 января 2012

У меня есть следующий код.t отображается как недействительный во второй строке.

Cannot resolve symbol 't'

Как создать экземпляр универсального класса, используя Type t.

Type t = currentProperty.PropertyType;
var x = new MyClass<t>();

спасибо

Ответы [ 2 ]

4 голосов
/ 30 января 2012

Обобщения являются только функцией времени компиляции, а не функцией времени выполнения.Вам нужно создать класс с помощью отражения.

Type t = currentProperty.PropertyType;
Type desiredType = typeof(MyClass<>).MakeGenericType(t);
var instance = Activator.CreateInstance(desiredType);
2 голосов
/ 30 января 2012

t - это тип объекта , вычисляемый во время выполнения; Вы не можете использовать его там, где компилятор C # ожидает тип времени компиляции name . Компилятор выдаёт вам эту ошибку, потому что не может найти тип с буквальным именем «t».

Но, черт возьми, ты все еще можешь делать, что хочешь, хотя и не так просто:

var t = currentProperty.PropertyType;
var genericType = typeof(MyClass<>).MakeGenericType(t);
var x = Activator.CreateInstance(genericType);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...