表达式主体匿名方法

时间:2020-05-06 21:22:32

标签: c#

我正在阅读以下博客: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 个答案:

答案 0 :(得分:1)

在您的情况下,这个新的C#8开关表达式基本上与元组中的模式匹配。 (current, input) switch告诉您将要比较这两个值。 (State.XYZ, Input.ABC)告诉您将检查是否current == State.XYZ && input == Input.ABC,如果是,请在=>运算符之后返回表达式,否则检查下一个。 _匹配任何值,可以用作(_, X)或仅用作_