类型' int'的值不能使用

时间:2016-04-03 18:32:37

标签: 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);
}

1 个答案:

答案 0 :(得分:7)

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

请改用MidpointRounding.ToEven,如果这就是您的意思。

其他一些观察结果:

  • 无需检查midpointRounding是否在范围内Math.Round will take care of that
  • 不要显示异常的消息框,这不是一个好方法,它将UI代码与逻辑代码混合在一起。你应该让异常传播,如果有的话。
  • 你写了return (double)((double)num);,一次演员就够了;)
  • 无需投放(double)value,因为value已经是double
  • 最后......将double投射到decimal,然后使用给定方法对其进行舍入,然后将其强制转换回double 理念。你将失去精确度,中点四舍五入很可能会被击败。如果中点舍入方法很重要,请始终使用decimal