Ответ 1
Нет, дефис не разрешен.
Очевидно, вы могли бы заменить дефис символом подчеркивания, но, как предположил @benPearce, CamelCase был бы лучшим выбором и соответствовал бы большинству стандартов кодирования С#.
Есть ли способ иметь запись перечисления с дефисом, "-", в названии, например:
enum myEnum
{
ok,
not-ok,
}
Я видел вопрос о перечислениях с дружескими именами, однако это могло бы сэкономить мне немного работы, если я могу использовать дефис напрямую.
Обновление. Причина, по которой я хочу использовать дефис, упрощает использование перечисления для списков заданных значений, которые я не контролирую, например:
rejected
replaced
local-bye
remote-bye
Нет, дефис не разрешен.
Очевидно, вы могли бы заменить дефис символом подчеркивания, но, как предположил @benPearce, CamelCase был бы лучшим выбором и соответствовал бы большинству стандартов кодирования С#.
Предположим, что у вас есть:
enum E { a = 100 , a-b = 200 };
...
E b = E.a;
int c = (int)(E.a-b);
Установлен ли c в 200 или 0?
Разрешение дефисов в идентификаторах сделает язык почти невозможным для анализа лексически. Этот язык уже достаточно сложно проанализировать, что с <<
и >>
, каждый из которых имеет два совершенно разных значения; мы не хотим усложнять себя.
В инструкциях по именованию говорится использовать CamelCasing для значений перечисления; следуйте рекомендациям.
В случае, если кому-то нужно использовать дефисы, я думаю, что этот подход может помочь: Используйте подчеркивание в объявлении перечисления, а затем замените подчеркивание на дефис.
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" и вам нужно использовать перечисления.
Вы говорите: "Я бы с удовольствием следил за рекомендациями, но список строк, которые перечислены, чтобы представлять из моего контроля". Поскольку для этого вам нужны дефисы, я предлагаю вам переопределить метод toString() для перечислений, для которого вам нужно это, и вызвать toString() в коде, где вам нужно представлять имена.