为什么我的参数x
表现如此不稳定?
- 示例 1 - 当前上下文中不存在。
- 示例 2 - 无法重用
x
,因为它是在“子”范围内定义的。 - 示例 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”的局部变量,因为它会给“x”赋予不同的含义,后者已在“子”范围中用于表示其他内容
我理解这个问题中回答的范围界定,C# 在 foreach 中重用变量是否有原因?. 然而,这是我以前从未见过的。此外,它还回答了这个问题,C# 中 lambda 变量的作用域是什么?,不完整或错误。
示例 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);
没有产生错误。
有了公认的答案,Eric Lippert 的这些博客文章帮助我了解正在发生的事情。如果有人仍然感到困惑: