2011-02-09 26 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