Local variable scope error - foreach loop
我有以下代码:
1 2 3 4 5 6 7 | if (Current == false) { foreach (var visual in visuals) visual.IsSelected = value; } Visual visual = visuals[currentIndex]; |
当我编译时,我有一个错误:
A local variable named 'visual' cannot be declared in this scope
because it would give a different meaning to 'visual', which is
already used in a 'child' scope to denote something else
另外,如果我没有声明
1 | Visual visual = visuals[currentIndex]; |
用:
1 | visual = visuals[currentIndex]; |
错误如下:
The name 'visual' does not exist in the current context
为什么会这样?
作为Soner G?N_l指出,第一个结构:
1 2 3 4 5 6 7 | if (Current == false) { foreach (var visual in visuals) visual.IsSelected = value; } Visual visual = visuals[currentIndex]; |
根据语言定义是非法的。请参阅SONER提供的链接:
https://stackoverflow.com/a/2050864/447156
使之成为非法的减少了人类阅读代码时混淆的可能性。编译器可以将其视为合法的,但是该语言的设计者认为(我也同意)这是一个使C更容易理解的机会。
1 2 3 4 5 6 7 8 | if (Current == false) { foreach (var visual in visuals) visual.IsSelected = value; } // Parent and child scope have same variable name so it creates ambiguity. Visual visual = visuals[currentIndex]; |
和
1 2 3 4 5 6 7 8 | if (Current == false) { foreach (var visual in visuals) visual.IsSelected = value; } // The variable visual in not defined outside the scope of if statement visual = visuals[currentIndex]; |
在第一种情况下,外部和内部声明的变量之间存在歧义。(全局和局部)。
编译器对您所指的
在第二种情况下,编译器不知道什么是EDCOX1(0)。
在这里阅读更多;
Why this behavior?
在第一种情况下,您已经在foreach循环中声明了名为
在第二种情况下,不能使用关键字
试试这个:
1 | Visual visual1 = visuals[currentIndex]; |