2011-02-09 56 views
1

我在这四个不同的命名空间一堆类:数字命名空间

  • ABCX
  • abcy
  • ABCZ

既不包含的定义为“myEnum类的“直接在命名空间”ab“下面。我在“a.b.c.x”和“a.b.c.z”中定义了“myEnum”,但出现以下错误:

命名空间'a.b'已包含myEnum的定义。

这是为什么?我该如何解决它?

编辑:

嗯,我固定它。显然,我不能在命名空间中有这样的“a.b.202.x”数字。这就是它所抱怨的。有谁知道为什么?

回答

4

Apparently i cannot have numbers like this "a.b.202.x" in a namespace. that's what it was complaining about. anyone know why?

与无法声明int 202;相同的原因 - 标识符不能以C#中的数字开头。

编辑

下面是一个试图解释你具体(奇怪)编译器错误,通过复制它。

下面的代码:

namespace a.b 
{ 
    enum myEnum {} 
}  

namespace a.b.202.x 
{ 
    enum myEnum {} 
} 

失败,好奇(我反正)错误:

{ expected 
The namespace 'a.b' already contains a definition for 'myEnum' 

推测是这样做的原因是糟糕的标识符使编译器将第二个名称空间声明视为“格式错误”,忽略.202.x。如果是这样,则编译器确实应该看到第二个myEnum类型位于命名空间a.b中,这当然是重复的。

这是进一步支持的事实,如果你完全摆脱了第一个命名空间(和它的枚举)并重新编译,你会看到第二个枚举类型的完全限定名被推断为a.b.myEnum(尽管未能编译)。

enter image description here

+0

但是,为什么会导致这样的编译器错误?我会期望某种类型的语法错误,而不是一种类型被定义两次的投诉。 – CodesInChaos 2011-02-09 20:02:50