局部变量范围错误 - 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];

错误如下:

"视觉"这个名称在当前上下文中不存在

为什么会有这种行为?

局部变量范围错误 - foreach 循环

在第一种情况下,外部和内部声明的变量之间存在歧义。全局和本地)。

编译器对您所指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# 更易于理解的机会。