我有以下代码:
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'
为什么会出现这种情况?
答案 0 :(得分:1)
为什么会出现这种情况?
在你的第一个案例中,你已经在foreach循环中声明了名为visual
的变量。
在第二种情况下,您无法使用关键字visual
,因为它不存在。它只能在你的foreach循环中使用。
试试这个:
Visual visual1 = visuals[currentIndex];
答案 1 :(得分:1)
答案 2 :(得分:1)
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];
答案 3 :(得分:1)
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#更容易理解的机会。