Есть у меня перечисления. Очень большой список. Например:
enum State : byte {
IDLE, //0 - стойка
WALK_F, //1 - ходьба вперёд
WALK_B, //2 - ходьба назад
BLOCK, //3 - блок
SIT, //4 - сидение
JUMP_UP, //5 - прыжок вверх
JUMP_F, //6 - прыжок вперёд
JUMP_B, //7 - прыжок назад
BLOCK_SIT, //8 - блок в присядке
TURN, //9 - поворот
RUN, //10 - бег.
... и т.д.
};
Можно ли как-то применять эти значения в виде, представленным ниже?
byte test = State.RUN;
Или мне постоянно придется писать приведение к типу? Типа:
byte test = (byte)State.RUN;
Вроде бы если enum является перечислением из одного типа, то можно написать
enum ENUM_NAME : TYPE { ... };
и должно все работать. Но IDE упорно говорит что все равно надо кастовать. Может я что-то не понимаю.
Просто делать такое приведение типа абсолютно везде чересчур затратно. особенно если я решу тип сменить. Таких мест будет сотня. Тем более, если я заранее говорю, что у меня в перечислении будет всё одного конкретного типа, то почему бы такому не работать?
Ответ
Язык вам тонко намекает, что кастовать туда-сюда между enum и целым типом — не самая здравая и строго типизированная мысль. Вам не должно хотеться повсеместно использовать тип byte, если у вас есть enum с базовым типом byte
Просто используйте сам enum везде, где можно. Где нельзя — преобразуйте тип. И этой операции положено быть явной, потому что вы меняете тип переменной.
При этом какой у перечисления базовый тип — значения не имеет. Хоть enum Foo : int преобразовывать к int, хоть enum Bar : byte преобразовывать в byte — операция должна быть явной.
Комментариев нет:
Отправить комментарий