Вы должны сыграть, чтобы убедиться, что это действительно то, что вы хотите сделать. Это функция безопасности типа.
Вы должны думать, что перечисление отличается от его базового типа - и от других перечислений с тем же базовым типом. Они достаточно разные, поэтому, если вы хотите использовать одного как другого, вам нужно разыграть.
Иногда это может быть болью, но в конечном итоге это хорошо.
Почему вы все равно кастуетесь перед выключателем? Просто включите фактические значения перечисления:
CmdlnFlags switchFlag = CmdlnFlags.ValB;
switch (switchFlag) {
case CmdlnFlags.ValA: Console.WriteLine('A'); break;
case CmdlnFlags.ValB: Console.WriteLine('B'); break;
}
Здесь вы не действительно хотите трактовать флаг как байт - вы хотите трактовать его как флаг и включать его. Так что это именно то, что вы должны сделать.