繁体   English   中英

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

[英]Local variable scope error - foreach loop

我有以下代码:

if (Current == false)
{
    foreach (var visual in visuals)
        visual.IsSelected = value;
}

Visual visual = visuals[currentIndex];

当我编译时,我有这个错误:

名为'visual'的局部变量不能在此范围内声明,因为它会给'visual'赋予不同的含义,'visual'已在'child'范围内用于表示其他内容

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

Visual visual = visuals[currentIndex];

有:

visual = visuals[currentIndex];

错误如下:

“visual”这个名称在当前上下文中不存在

为什么会这样?

为什么会这样?

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

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

试试这个:

Visual visual1 = visuals[currentIndex];

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

编译器对于您所指的visual感到困惑。 外一个还是内一个?

在第二种情况下,编译器不知道什么是visual

在这里阅读更多相关信息;

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

正如SonerGö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#更容易理解的机会。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM