关于c#:局部变量范围错误 – foreach循环

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

另外,如果我没有声明visual变量,也就是说我替换了:

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];


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

编译器对您所指的visual感到困惑。外面的还是里面的?

在第二种情况下,编译器不知道什么是EDCOX1(0)。

在这里阅读更多;


Why this behavior?

在第一种情况下,您已经在foreach循环中声明了名为visual的变量。

在第二种情况下,不能使用关键字visual,因为它不存在。它只在foreach循环中可用。

试试这个:

1
Visual visual1 = visuals[currentIndex];