Объявите переменную, используя переменную типа - PullRequest
19 голосов
/ 26 января 2011

У меня есть этот код:

Type leftType = workItem[LeftFieldName].GetType();

Затем я хочу объявить переменную этого типа:

leftType someVar;

Возможно ли это?

Ответы [ 6 ]

23 голосов
/ 26 января 2011

Вы можете сделать что-то подобное и привести их к известному интерфейсу.

var someVar = Convert.ChangeType(someOriginalValue, workItem[LeftFieldName].GetType());
var someVar = Activator.CreateInstance(workItem[LeftFieldName].GetType());

Если вы замените var на dynamic (и вы используете .Net 4), вы можете вызватьметоды, которые вы ожидаете для объекта someVar.Если они не существуют, вы просто получите исключение MissingMethodException.

10 голосов
/ 26 января 2011

Это невозможно.

Типы переменных являются концепцией времени компиляции; не имеет смысла объявлять переменную типа , которая не известна до времени выполнения .
Вы не сможете ничего сделать с переменной, так как не знаете, что это за тип.

Возможно, вы ищете ключевое слово dynamic.

3 голосов
/ 26 января 2011

object x = Activator.CreateInstance (Type) позволит вам создать объект. Можете ли вы многое сделать с этим после этого, я не уверен.

3 голосов
/ 26 января 2011

Нет, это невозможно.Тип переменной должен быть известен во время компиляции.

Вы можете объявить переменную типа object, она будет способна хранить любой тип данных.

3 голосов
/ 26 января 2011

Вы не можете сделать это.

Вы можете использовать тип динамический для .Net 4, но для более ранних версий .Net единственным подходящим типом будет object, которыйпозже вам нужно будет выполнить приведение вручную, снова протестировав .GetType() на том, что вы присвоили переменной object.

Чтение: SO link: whats-the-the-разница-Между-dynamicc-4-и-вар

2 голосов
/ 26 января 2011

GetType оценивается во время выполнения, а не-1002 * объявление находится во время компиляции (оно становится более конкретным, чем это, да), поэтому нет.Даже var потребует от вас присвоения ему однозначного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...