局部变量范围错误 - foreach 循环
本文关键字:foreach 循环 错误 范围 局部变量 | 更新日期: 2023-09-27 17:56:53
我有以下代码:
if (Current == false)
{
foreach (var visual in visuals)
visual.IsSelected = value;
}
Visual visual = visuals[currentIndex];
当我编译时,我有这个错误:
无法在此范围内声明名为"visual"的局部变量 因为它会给"视觉"赋予不同的含义,即 已经在"子"范围内用于表示其他内容
另外,如果我不声明visual
变量,那就是我替换:
Visual visual = visuals[currentIndex];
跟:
visual = visuals[currentIndex];
错误如下:
"视觉"这个名称在当前上下文中不存在
为什么会有这种行为?
在第一种情况下,外部和内部声明的变量之间存在歧义。全局和本地)。
编译器对您所指visual
感到困惑。外的还是内?
在第二种情况下,编译器不知道visual
是什么。
在此处阅读更多相关信息;
为什么会有这种行为?
在第一种情况下,您已经在 foreach 循环中声明了名为 visual
的变量。
在第二种情况下,您不能使用关键字 visual
,因为它不存在。 它仅在 foreach 循环中可用。
试试这个:
Visual visual1 = visuals[currentIndex];
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];
和
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];
正如Soner Gönül指出的那样,第一个结构:
if (Current == false)
{
foreach (var visual in visuals)
visual.IsSelected = value;
}
Visual visual = visuals[currentIndex];
根据语言的定义是非法的。 请参阅Soner提供的链接:
https://stackoverflow.com/a/2050864/447156
将其定为非法可以减少人类阅读代码时混淆的机会。 编译器可以将其视为合法,但该语言的设计者认为(我同意)这是一个使 C# 更易于理解的机会。