Анонимный метод тела выражения - PullRequest
1 голос
/ 07 мая 2020

Я читаю этот блог: https://deniskyashif.com/2019/11/20/a-practical-guide-to-state-machines/

и есть этот фрагмент кода:

State ChangeState(State current, Input input) =>
    (current, input) switch
    {
        (State.Created, Input.Admit) => State.Ready,
        (State.Ready, Input.ScheduleDispatch) => State.Running,
        (State.Running, Input.IOorEventWait) => State.Waiting,
        (State.Waiting, Input.IOorEventComplete) => State.Ready,
        (State.Running, Input.Interrupt) => State.Ready,
        (State.Running, Input.Exit) => State.Terminated,
        _ => throw new NotSupportedException(
            $"{current} has no transition on {input}")
    };

который я тестировал в Visual Studio, работает хорошо. Однако я понятия не имею, ПОЧЕМУ и КАК это работает. Я даже не знаю, ЧТО это должно быть. Я получаю, что часть State ChangeState(State current, Input input) => - это подпись метода и тело выражения, и я предполагаю, что (current, input) switch - это какая-то сигнатура анонимного метода, но что это такое и почему не работает, если я вставляю ее штатным способом?

1 Ответ

1 голос
/ 07 мая 2020

Это новое выражение переключателя C# 8 в основном соответствует шаблонам в кортежах в вашем случае. (current, input) switch сообщает вам, что вы будете сравнивать эти 2 значения. (State.XYZ, Input.ABC) сообщает вам, что вы проверите, если current == State.XYZ && input == Input.ABC, если да, вернуть выражение после оператора =>, в противном случае проверьте следующее. _ соответствует любому значению и может использоваться как (_, X) или просто _.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...