Может ли запись enum C # иметь дефис в имени - PullRequest
12 голосов
/ 24 февраля 2010

Есть ли в любом случае запись enum с дефисом "-" в имени, например:

enum myEnum
{
   ok,
   not-ok,
}

Я видел вопрос о перечислениях с понятными именами , однако, если бы я мог использовать дефис напрямую, это сэкономило бы мне немного времени.

Обновление: причина, по которой я хочу использовать дефис, заключается в том, что он позволяет легко использовать перечисление для списков заданных значений, которые я не могу контролировать, например:

 rejected
 replaced
 local-bye
 remote-bye

Ответы [ 4 ]

21 голосов
/ 24 февраля 2010

Нет, дефис запрещен.

Идентификаторы

Очевидно, вы могли бы заменить дефис подчеркиванием, но, как подсказывает @benPearce, CamelCase будет лучшим выбором, и в соответствии с большинством стандартов кодирования C #.

16 голосов
/ 24 февраля 2010

Предположим, у вас есть:

enum E { a = 100 , a-b = 200 };
...

E b = E.a;
int c = (int)(E.a-b);

Установлено ли значение c на 200 или 0?

Использование дефисов в идентификаторах сделает язык практически невозможным для лексического анализа . Этот язык уже достаточно сложен для анализа того, что с << и >> каждый имеет два полностью различных значения; мы не хотим усложнять себе жизнь.

В правилах именования сказано, что CamelCasing используется для перечисления значений; следуйте инструкциям.

4 голосов
/ 12 марта 2013

Если кому-то нужно использовать дефисы, я думаю, что этот подход может помочь: используйте подчеркивание в объявлении enum, а затем замените подчеркивание дефисом.

enum myEnum { ok, not_ok, }

var test = myEnum.not_ok;
// let's say this value is coming from database or somewhere else
var someValue = "not-ok"; 

if(test.ToString().Replace("_","-").equals(someValue)) { /* some stuff */ }

Не самая лучшая практика, но может помочь, если у вас нет контроля над «someValue» и вам необходимо использовать перечисления.

0 голосов
/ 15 мая 2012

Вы говорите: «Я бы с радостью следовал инструкциям, но список строк, который необходимо представить enum, находится вне моего контроля». Так как именно поэтому вам нужны дефисы, я предлагаю переопределить метод toString () для перечислений, для которых вам это нужно, и вызвать toString () в вашем коде, где вам нужно представлять имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...