C# 编译错误:';x';与'声明冲突;y、 x';?

C# 编译错误:';x';与'声明冲突;y、 x';?,c#,compiler-errors,C#,Compiler Errors,我发现以下错误: “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]);

我发现以下错误:

“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;
    }
}

这是代码中不同类型的不同实例之间的命名冲突。我假定它是每个
statement中的一个变量。只需重命名它,您就完成了。

您在示例中没有看到顶部的using语句。您遇到的是名称空间冲突。

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”,并让它在第一次使用它的块中表示相同的内容


这里最好的选择是重命名本地。标准做法是给当地人起名字,无论如何都要以小写字母开头

此外,建议对局部变量使用camelCaseNames,这也减少了与类型名称(应使用PASCALCASE)等发生冲突的机会,并使其他开发人员(遵守此约定的开发人员)更容易阅读代码。