Вар динамический известен во время компиляции? - PullRequest
2 голосов
/ 12 февраля 2012

если у нас есть:

dynamic x = "hello"; // Static type is dynamic, runtime type is string
var y = "hello"; // Static type is string, runtime type is string

Fine.

а как же

dynamic x = *veryComplicatedRunTimeStructure_UnknownatCompileTime.*; 
var y=x; 

it DOES compile!

У меня проблема со строкой second.

известно, что var вычисляется в время компиляции время.

enter image description here

Но во время компиляции не имеет понятия о типе ....

так ... каков тип компиляции y?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2012

Когда тип выражения присваивания равен dynamic, то же относится и к неявно объявленному типу переменной.Здесь нет ничего особенного в dynamic - ваш код эквивалентен:

dynamic x = new { t = 3, y = 3 };
dynamic y = x;

Из раздела 8.5.1 спецификации C # 4:

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

[...]

В объявлении локальной переменной с неявным типом тип объявленной локальной переменной принимается таким же, как тип выражения, использованного для инициализации переменной.

Итак, здесь выражение dynamic и переменная ...

4 голосов
/ 12 февраля 2012

Этот код:

dynamic x = new {t = 3; y=3};
var y = x;

равен:

dynamic x = new {t = 3; y=3};
dynamic y = x;

, поэтому, чтобы ответить на ваш вопрос, тип y будет dynamic.

...