是否可以使用 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 需要一个变量来操作,所以我陷入了困境。
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
在我的情况下。
是否“更好”-取决于您,但如果您必须有一个表达式而不是多个语句,那么这是一个选项。