Подтвердить что ты не робот

Может ли запись с перечислением С# иметь дефис в имени

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

enum myEnum
{
   ok,
   not-ok,
}

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

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

 rejected
 replaced
 local-bye
 remote-bye
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

enum myEnum { ok, not_ok, }

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

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

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

Ответ 4

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