Почему мой параметр x
ведет себя так хаотично?
x
невозможно, так как он определен в «дочерней» области.Пример 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);
Ошибок не возникло.
С принятым ответом, эти сообщения в блоге от Эрика Липперта помогли мне понять, что происходит.Если кто еще не понял: