是否可以通过 C# 中的模式匹配和 switch 语句将 if-else 链转换为更好的代码?

问题描述 投票:0回答:1

是否可以使用 C# 模式匹配和 switch 语句来简化这段代码?

    int target;

    if (a < b) target = 1;
    else if (a > b) target = 2;
    if (c < d) target = 1;
    if (d > c) target = 2;
    else target = e > f ? 1 : 2;

我尝试过,但由于 switch 需要一个变量来操作,所以我陷入了困境。

c# switch-statement pattern-matching
1个回答
0
投票

完全可以使用所有参数作为元组将这些条件转换为

switch expression
,而不是使用
when
条件匹配整个元组的部分。如果您需要一些其他条件,请查看模式

var r = (a, b, c, d, e, f) switch
{
    // property matching
    { a: var x, b: var y } when x < y => 1,
    { a: var x, b: var y } when x > y => 2,
    // positional var with discards
    var ( _, _, x, y, _, _) when x < y => 1,
    var ( _, _, x, y, _, _) when x > y => 2,
     ...
};

请注意,您将无法重用名称,因为每种情况下的本地名称都会尝试隐藏外部范围中的名称 - 因此

a < b
必须匹配其他名称 -
x < y
在我的情况下。

是否“更好”-取决于您,但如果您必须有一个表达式而不是多个语句,那么这是一个选项。

© www.soinside.com 2019 - 2024. All rights reserved.