Dimyan, тут некоторые нюансы имеются...
Изначально вопрос был поставлен так:
Можно ли и если можно то как создать символьное перечесление (enum)?
Четкий и однозначный ответ на это дает MSDN: тип
char не может быть использован в качестве базового для
enum. И это факт, с которым не поспоришь.
Почему же код, приведенный тобой, компилируется без ошибок и работает, нет ли тут противоречия с MSDN? Выяснить это очень просто. Достаточно выполнить маленький фрагмент кода:
...
MyEnum n;
n = MyEnum.cbA;
Console.WriteLine(n.GetType().Name);
Console.WriteLine(n.GetTypeCode().ToString());
...
Видим на экране результат его выполнения:
MyEnum
Int32
Первая строка - это имя типа переменной
n. Как и ожидалось, это
MyEnum.
Вторая строка - это имя типа, на котором базируется переменная
n, а именно -
Int32, а никак не
Char. Так что вместо
символьного перечисления получилось
целочисленное, отсюда и необходимость в дальнейшем явного преобразования в
char.
Может немного запутать то, что конструкция вроде
cbA='A'
работает без ошибок. Но и это неудивительно, поскольку
cbA базируется на типе
Int32, к которому тип
char приводится неявно (выше я приводил цитату из MSDN).
Итак, резюме: ответ на поставленный вопрос - отрицательный: нет,
символьное перечисление создать нельзя. Но можно взамен создать
целочисленное перечисление, задать ему значения кодов нужных символов, а в процессе работы приводить коды в символьный тип посредством явного задания
(char).