不能使用"int"类型的值

use*_*186 1 c#

我只是学习C#而无法弄清楚这段代码有什么问题.

错误CS1750'int'类型的值不能用作默认参数,因为没有标准转换来键入'MidpointRounding'

码:

public static double MyRound(double value, int point, MidpointRounding midpointRounding = 1)
{
    if (!Enum.IsDefined(typeof (MidpointRounding), midpointRounding))
        throw new ArgumentOutOfRangeException(nameof(midpointRounding));

    decimal num = (decimal)((double)value);

    try
    {
        num = Math.Round(num, point, midpointRounding);
    }
    catch (Exception exception1)
    {
        Exception exception = exception1;
        MessageBox.Show(exception.Message, "Error : MyRound", MessageBoxButton.OK, MessageBoxImage.Hand);
    }

    return (double)((double)num);
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ski 7

最后一个参数是类型MidpointRounding,它是一个枚举.int您可以隐式分配给枚举的唯一文字是0.您提供了默认值1,这是编译器抱怨的内容.

使用MidpointRounding.ToEven替代,如果这是你的意思.

其他一些观察:

  • 无需检查是否midpointRounding在范围内,Math.Round将照顾到这一点.
  • 不要从异常中显示消息框,这不是一个好方法,它将UI代码与逻辑代码混合在一起.你应该让异常传播,如果有的话.
  • 你写道return (double)((double)num);,一个演员就够了;)
  • 不需要施放(double)value,就像value现在一样double
  • 最后...铸造一doubledecimal,然后用给定的方法舍入,然后浇注回double不是一个好主意.你将失去精确度,中点舍入方法很可能会失败.使用decimal一直以来,如果中点四舍五入方法是很重要的.