Почему имеет объем то, если и делегирует этот путь в c#

7
задан Community 23 May 2017 в 11:49
поделиться

3 ответа

Это поведение покрыто разделом 3 из спецификации языка C#. Вот является кавычка от спецификации

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

я думаю более легкий способ читать, это - то, что в целях объявления переменной (и много других связанных с блоком функций) делегат лямбды блок / анонимный блок делегата рассматривают не отличающиеся, чем нормальный блок.

относительно того, почему язык был разработан таким образом, спецификация явно не указывает. Мое мнение, хотя простота. Если код рассматривают как просто другой блок затем, он делает стандартные программы анализа кода легче. Можно сохранить все существующие стандартные программы для анализа блока для семантических ошибок и определения имен. Это особенно важно, когда Вы рассматриваете переменный подъем. Лямбды в конечном счете будут другой функцией, но у них все еще есть доступ ко всем в переменных объема в месте объявления.

9
ответ дан 6 December 2019 в 23:14
поделиться

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

2
ответ дан 6 December 2019 в 23:14
поделиться

Я думаю, что это - этот способ препятствовать тому, чтобы devs стрелял себе в ногу.

0
ответ дан 6 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: