[英]'Use of unassigned local variable' error inside foreach loop with yield return
[英]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.