模式匹配 switch 语句是否保证按顺序发生?

Ric*_*ter 1 c# pattern-matching

在下面的代码中,result保证是1,或者没有顺序保证并且它也可以返回 吗2

record Foo
{
    bool X { get; init; }
    bool Y { get; init; }
    bool Z { get; init; }
}

var foo = new Foo { X = true, Y = true };
var result = foo switch
{
    { X: true } => 1,
    { Y: true } => 2,
    { Z: true } => 3,
    _ => 0
}
Run Code Online (Sandbox Code Playgroud)

小智 5

这是一个switch 表达式,而不是 switch 语句。

是的。

表达式的结果switch是第一个表达式臂的表达式值,switch该表达式臂的模式与输入表达式匹配,并且其大小写保护(如果存在)的计算结果为true。表达式 switch臂按文本顺序求值。

来自switch 表达式 - 使用 switch 关键字的模式匹配表达式(Microsoft Learn)

  • 也值得看看使用像[Sharplab](https://sharplab.io/#v2:EYLgtghglgdgPgAQEwEYCwAoBBmABM3AYVwG9NcL88EAWXAWQAoBKU8yjgNwgCdcAzAPaDcAXlwwApgHdcAMWGlADTG4ALjwCukgDS4Amms07这样的反编译器降低后实际编译的内容cAXwDc7DhW58ekgM5aANurVCRj6VHUBjAAtrGzIMG3ClZRANbUlzMQA+XBRdYIilA2iTOLNE3CRUsPTKElwALSzY+NEk7ELiygB9PIAGNMpLdoou/BQATkYHZzdmKyKKM0xJjEwHP0EEABN5YUxQjhxcYGEXFS UAc0l1C1xYXxPpjbxtwV2jUsPj05hz82DNm92yg6OTs6fpmYgA==) (3认同)