2012-01-29 2 views
1

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

Cannot resolve symbol 't'

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

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

спасибо

+0

Это не имеет смысла; у вас нет типа времени компиляции. – SLaks

ответ

4

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

Type t = currentProperty.PropertyType; 
Type desiredType = typeof(MyClass<>).MakeGenericType(t); 
var instance = Activator.CreateInstance(desiredType); 
2

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

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

var t = currentProperty.PropertyType; 
var genericType = typeof(MyClass<>).MakeGenericType(t); 
var x = Activator.CreateInstance(genericType); 
+0

Бард живет! –

Смежные вопросы