Какова область действия локальной переменной, объявленной в Linq Query.
Я писал следующий код
static void Evaluate()
{
var listNumbers = Enumerable.Range(1, 10).Select(i => i);
int i = 10;
}
Компилятор отметил ошибку в строке int i=10, заявив
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
Я не могу понять, почему возникает эта ошибка.
Насколько я понимаю, i
выйдет за рамки после первой строки (в цикле foreach). Итак, i
можно объявить снова.
Фактическое поведение заключается в том, что i
не может быть доступен после первой строки (в цикле foreach), что правильно. Но i
нельзя объявить снова. Это кажется странным.
РЕДАКТИРОВАТЬ Это следующий вопрос, основанный на ответе Андраса. Ответ очень хороший, но вызывает дополнительные сомнения.
static void Evaluate3()
{
var listNumbers = Enumerable.Range(1, 10).Select(i => i);
var listNumbers1 = Enumerable.Range(1, 10).Select(i => i);
}
На основе логики функции Оцените, что .Select(i=>i) и int i=10, оба i, являются локальными для функционального блока и, следовательно, усложняют ошибку.
Функция Evaluate3 не должна компилироваться, так как в блоке методов есть два i, но она успешно компилируется без каких-либо предупреждений/ошибок.
Вопрос. Либо Evaluate, либо Evaluate3 не должны компилироваться, либо оба должны компилироваться.