Страницы

Поиск по вопросам

среда, 31 октября 2018 г.

Можно ли использовать Enum без необходимости постоянно кастовать?

Есть у меня перечисления. Очень большой список. Например:
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 — операция должна быть явной.

Комментариев нет:

Отправить комментарий