Числа в пространстве имен - PullRequest
1 голос
/ 09 февраля 2011

У меня есть куча классов в этих четырех разных пространствах имен:

  • a.b.c.x
  • a.b.c.y
  • a.b.c.z

Ни один из классов, содержащих определение для "myEnum", не находится непосредственно под пространством имен "a.b". Я определил «myEnum» в «a.b.c.x» и «a.b.c.z», но я получаю следующую ошибку:

Пространство имен 'a.b' уже содержит определение myEnum.

Почему это? И как я могу это исправить?

EDIT:

Ну, я исправил это. По-видимому, я не могу иметь такие номера как a.b.202.x в пространстве имен. это то, на что он жаловался. кто-нибудь знает почему?

1 Ответ

4 голосов
/ 09 февраля 2011

Видимо я не могу иметь такие номера, как это "a.b.202.x" в пространстве имен. это то, на что он жаловался. кто-нибудь знает почему?

По той же причине, по которой вы не можете объявить int 202; - идентификаторы не могут начинаться с цифр в C #.

EDIT

Вот попытка объяснить вашу специфическую (странную) ошибку компилятора, воспроизведя ее.

Следующий код:

namespace a.b
{ 
   enum myEnum {}
}     

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

терпит неудачу с любопытными (в любом случае) ошибками:

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

I предполагает , что причина этого в том, что неверный идентификатор заставляет компилятор рассматривать второе объявление пространства имен как "искаженное", игнорируя .202.x. Если это так, отсюда следует, что компилятору действительно должно показаться, что второй тип myEnum находится в пространстве имен a.b, что, конечно, будет дубликатом.

Это подтверждается еще и тем фактом, что если вы полностью избавитесь от первого пространства имен (и перечисления в нем) и перекомпилируете, вы увидите, что полное имя второго типа перечисления выводится как a.b.myEnum (несмотря на невозможность компиляции).

enter image description here

...