Уточнение области действия лямбда

Почему мой параметр xведет себя так хаотично?

  1. Пример 1. Не существует в текущем контексте.
  2. Пример 2. Повторное использование x невозможно, так как он определен в «дочерней» области.
  3. Пример 3 — Хорошо. Это та часть, где я смущен. Возможно, другая «дочерняя» область?

Пример 1:

List list = new List { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
Console.Write(result.ElementAt(x));

создает эту ошибку времени компиляции:

Имя 'x' не существует в текущем контексте

, который я ожидаю.

Пример 2:

List list = new List { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
int x = 1;
Console.Write(result.ElementAt(x));

выдает эту ошибку времени компиляции:

Локальная переменная с именем 'x' не может быть объявлена ​​в этой области, потому что она придало бы другое значение слову «х», которое уже используется в «дочерняя» область для обозначения чего-то еще

Я понимаю область видимости, как указано в этом вопросе, Есть ли причина для повторного использования C# переменной в foreach?. Тем не менее, это то, чего я никогда раньше не видел. Кроме того, он делает ответы на вопрос Какова область действия лямбда-переменной в C#?неполными или неправильными.

Пример 3:

List list = new List { 1, 2, 3, 4, 5 };
List stringList = new List { "A", "B" };
var result = list.Where(x => x < 3);
var result2 = stringList.Where(x => x != "A");

Console.Write(result2);

Ошибок не возникло.


С принятым ответом, эти сообщения в блоге от Эрика Липперта помогли мне понять, что происходит.Если кто еще не понял:

пространство объявлений

простые имена

22
задан Community 23 May 2017 в 12:08
поделиться