@dee
Не могу сказать, что хотел, сделать исходный автор с помощью case - надо смотреть логику, но ваш вариант с if не эквивалентен, т.к. конструкции case являются точками входа, а не условиями, что-бы они стали эквивалентны вашему коду, в конце каждого блока case в исходниках должен был быть break; . Если исходный вариант верен, то ваш if должен выглядеть так:
а компилятор честно предупредил, что будет оптимизировать присвоения, это важно, если вы например работаете в многопоточном приложении, где кто-то может одновременно с вами читать значения.