我正在阅读以下博客: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
是某种匿名方法签名,但实际上是什么呢?如果我将其粘贴到常规方法中,为什么它不起作用?
答案 0 :(得分:1)
在您的情况下,这个新的C#8开关表达式基本上与元组中的模式匹配。
(current, input) switch
告诉您将要比较这两个值。
(State.XYZ, Input.ABC)
告诉您将检查是否current == State.XYZ && input == Input.ABC
,如果是,请在=>
运算符之后返回表达式,否则检查下一个。 _
匹配任何值,可以用作(_, X)
或仅用作_
。