Является ли использование неявных полей enum для представления числовых значений обязательно плохой практикой?
Вот пример использования: я хочу простой способ представлять шестнадцатеричные цифры, а поскольку перечисления на С# основаны на целых числах, они кажутся естественным совпадением. Мне здесь не нравится char
или string
, потому что я должен явно проверить их значения. Проблема с перечислениями состоит в том, что цифры [0-9]
не являются допустимыми идентификаторами полей (без уважительной причины). Мне пришло в голову, что мне не нужно объявлять цифры 0-9
, потому что они неявно присутствуют.
Итак, мое шестнадцатеричное перечисление будет выглядеть так:
public enum Hex : int {
A = 10,
B = 11,
C = 12,
D = 13,
E = 14,
F = 15
}
Итак, я мог написать Tuple<Hex,Hex> r = Tuple.Create(Hex.F,(Hex)1);
, а r.Item1.ToString() + r.Item2.ToString()
дал бы мне "F1". В основном, мой вопрос заключается в том, что если значение ToString()
числовой константы - это то, что я хочу назвать поле перечисления, почему проблематично полностью опустить объявление?
Альтернативное представление в качестве перечисления может иметь объявленные поля с некоторым префиксом, например:
public enum Hex : int {
_0 = 0,
_1 = 1,
_2 = 2,
_3 = 3,
_4 = 4,
_5 = 5,
_6 = 6,
_7 = 7,
_8 = 8,
_9 = 9,
A = 10,
B = 11,
C = 12,
D = 13,
E = 14,
F = 15
}
Проблема в том, что приведенный выше пример дал бы мне "F_1" вместо "F1". Очевидно, это легко исправить. Мне интересно, есть ли дополнительные проблемы с неявным подходом, который я не рассматриваю.