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 都不应该编译,或者两者都应该编译。