如何在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)
文档:表示值的符号的数字,如下表所示。
返回值 含义 -1 value
小于零0 value
等于零1 value
大于零一种方法如下:
var result = (Math.Round(self, decimals) - Math.Round(value, decimals)) switch { < 0 => -1, 0 => 0, _ => 1 };
现场示例:https://dotnetfiddle.net/ly18qu