使用模式匹配转换If语句



如何在switch表达式中使用模式匹配转换以下If语句?

if (Math.Round(self, decimals) - Math.Round(value, decimals) < 0)
return -1;
else if (Math.Round(self, decimals) - Math.Round(value, decimals) == 0)
return 0;
else
return 1;

虽然可以使用switch表达式(请参见@Klamsi的答案(,但有一个更好的方法:

return Math.Round(self, decimals).CompareTo(Math.Round(value, decimals));

来自文档:

返回

Int32

一个带符号的数字,表示此实例和值的相对值。

返回值描述
小于零此实例小于值,或者此实例不是数字(NaN(,值是数字
Zero此实例等于值,或者此实例和值都不是数字(NaN(、正无穷大或负无穷大
大于零此实例大于值,或者此实例是数字而值不是数字(NaN(
return Math.Round(self, decimals) - Math.Round(value, decimals) switch
{
< 0 => -1,
0 => 0,
_ => 1
};

虽然这是在这种特殊情况下你的问题的答案,但有更好的解决方案,请参阅其他答案

您可以用以下代码替换整个代码:

return Math.Sign(Math.Round(self, decimals) - Math.Round(value, decimals));

Math.Sign(value)文档:

表示值的符号的数字,如下表所示。

返回值含义
-1value小于零
0value等于零
1value大于零

一种方法如下:

var result = (Math.Round(self, decimals) - Math.Round(value, decimals)) switch
{
< 0 => -1,
0 => 0,
_ => 1                  
};

现场示例:https://dotnetfiddle.net/ly18qu

最新更新