首页 > 解决方案 > 如何防止函数中的隐式转换?

问题描述

我正在编写一个实用程序类,它具有像 IsEquals 和 IsGreaterThanEquals 这样的方法,它们接受 double 类型的参数。当我将浮点值发送到方法时,它们会隐式转换为双精度并进行比较。我不希望这种情况发生。当我发送浮点类型值而不是双精度类型值时,如何确保浮点值不会隐式转换为双精度并可能引发编译错误?

public static bool Equals(double firstDouble, double secondDouble)
{
     return Math.Abs(firstDouble - secondDouble) <= double.Epsilon;
}

即使我传递浮点参数值,上面的代码也有效。当我将浮点参数值传递给上述方法时,我希望编译抛出错误。

标签: c#

解决方案


如果您想在编译期间出错,请提供带有float's 的方法,但将它们标记为Obsolete

    [Obsolete("Don't use floats", error: true)]
    public static bool Equals(float a, float b) {
        throw new NotImplementedException();
    }

    [Obsolete("Don't use floats", error: true)]
    public static bool Equals(double a, float b) {
        throw new NotImplementedException();
    }

    [Obsolete("Don't use floats", error: true)]
    public static bool Equals(float a, double b) {
        throw new NotImplementedException();
    }

    public static bool Equals(double firstDouble, double secondDouble) {
        return Math.Abs(firstDouble - secondDouble) <= double.Epsilon;
    }

推荐阅读