Почему мой параметр x
ведет себя так хаотично?
- Пример 1 - не существует в текущем контексте.
- Пример 2 - Нельзя повторно использовать
x
, потому что он определен в области "child". - Пример 3 - Хорошо. Это та часть, в которой я смущен. Возможно, различная "детская" область?
Пример 1:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
Console.Write(result.ElementAt(x));
создает эту ошибку времени компиляции:
В текущем контексте имя 'x' не существует
который я ожидаю.
Пример 2:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
int x = 1;
Console.Write(result.ElementAt(x));
создает эту ошибку времени компиляции:
Локальная переменная с именем 'x' не может быть объявлена в этой области, поскольку она означало бы другое значение "х", которое уже используется в 'child' для обозначения чего-то еще
Насколько я понял, в этом вопросе я понял, Есть ли причина повторного использования С# переменной в foreach?. Однако этого я никогда не видел. Кроме того, он дает ответы на этот вопрос, Какова область видимости лямбда-переменной в С#?, неполная или неправильная.
Пример 3:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
List<string> stringList = new List<string> { "A", "B" };
var result = list.Where(x => x < 3);
var result2 = stringList.Where(x => x != "A");
Console.Write(result2);
Произошла ошибка.
С принятым ответом эти сообщения в блоге от Эрика Липперта помогли мне обернуть голову вокруг того, что происходит. Если кто-то все еще запутался: