Не существует однозначного ответа на вопрос, зачем вам нужна переменная состояния и установите ее в -1 каждый раз, когда вы вводите свой оператор switch. Но я могу вспомнить один пример, в котором вам действительно понадобится переменная.
Как я уже говорил в разделе комментариев, компилятор не знает и не заботится о том, что делает <> 2__current.
Это может быть длительный веб-запрос на загрузку файла. Это может быть результат вычисления или просто целое число, как в вашем примере. Но здесь кроется проблема, потому что компилятор не знает, что делает ваш код, он может вызвать исключение. Давайте рассмотрим пример того, что произойдет, если вы пропустите переменную _state, и вы столкнетесь с исключением, пытающимся что-то загрузить.
1) MoveNext is called.
2) this.<>2_current = WebRequest.GetFileAsync() throws HttpRequestException.
3) The exception is caught somewhere and the execution of the program is resumed.
4) The caller invokes MoveNext method.
5) this.<>2_current = WebRequest.GetFileAsync() throws HttpRequestException
Так что в этом случае мы застряли бы в цикле, потому чтосостояние будет изменено только после успешной загрузки этих данных.
Когда мы введем переменную _state, результат будет сильно отличаться.
1) MoveNext is called.
2) this.<>2_current = WebRequest.GetFileAsync() throws HttpRequestException.
3) The exception is caught somewhere and execution of the program is resumed.
4) The caller invokes MoveNext method.
5) Since there’s no switch case for -1, the default block is reached which informs about the end of a sequence.