编译错误:';x';与';y.x';
本文关键字:错误 编译 | 更新日期: 2023-09-27 18:28:05
我收到以下错误:
"Map"与声明"COServer.Map"冲突
不能在此作用域中声明名为"Map"的局部变量,因为它将赋予"Map"不同的含义,而"Map"已在"父或当前"作用域中用于表示其他
这是我的代码:
foreach (int[] RevP in Map.RevPoints)
{
if (RevP[0] == (int)(Client.Char.Map))
{
Client.Char.Map = (Map.Maps)(RevP[1]);
Client.Char.CurrentLoc = new Location(RevP[2], RevP[3]);
Client.Char.PreviousLoc = new Location(RevP[2], RevP[3]);
break;
}
}
foreach (int[][][] Map in Database.Maps)
{
if (Map[1][0][0] == (int)(Client.Char.Map))
{
foreach (int[] Chars in Map[2])
{
if (Chars[0] == 0)
{
Chars[0] = Client.Char.CharID;
Chars[1] = Client.Char.CurrentLoc.X;
Chars[2] = Client.Char.CurrentLoc.Y;
break;
}
}
break;
}
}
C#不允许在重叠的块中以两种不一致的方式使用相同的"简单名称",因为这样做会导致代码混乱,无法轻松理解或重构。以下是您的代码的简化版本,它演示了这个问题:
class Map
{
public static int[] RevPoints = { };
}
class P
{
void Main()
{
int[] maps = { };
// Here the simple name Map means the type:
foreach (int i in Map.RevPoints) {}
// Here the simple name Map means the loop variable:
foreach (int Map in maps) {}
}
}
不要那样做;这很令人困惑。代码的读者应该能够合理地看到标识符"Map",并在第一次使用它的整个块中使其含义相同。
这里最好的选择是重命名本地。标准做法是命名本地人,无论如何都要以小写字母开头。
这是代码中不同类型的不同实例之间的命名冲突。我假设它是foreach
语句中的一个变量。只要重命名它,你就完成了。
您在示例中没有看到顶部的using语句。您遇到的是名称空间冲突。