首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止函数中的隐式强制转换?

问如何防止函数中的隐式强制转换?
EN

Stack Overflow用户
提问于 2019-08-12 20:46:45
回答 3查看 134关注 0票数 3

我正在编写一个Utility类,它有像IsEquals和IsGreaterThanEquals这样的方法,可以接受double类型的参数。当我将浮点值发送给方法时,它们会被隐式转换为double并进行比较。我不希望这事发生。当我发送浮点类型的值而不是双精度类型的值时,如何确保浮点值不会隐式转换为双精度,并可能抛出编译错误?

代码语言:javascript
复制
public static bool Equals(double firstDouble, double secondDouble)
{
     return Math.Abs(firstDouble - secondDouble) <= double.Epsilon;
}

即使我传递了浮点型参数值,上面的代码也能正常工作。当我将浮点参数值传递给上面的方法时,我希望编译抛出错误。

EN

回答 3

Stack Overflow用户

发布于 2019-08-12 21:02:37

如果您希望在编译过程中出现错误,可以提供带有float的方法,但将它们标记为Obsolete

代码语言:javascript
复制
    [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;
    }
票数 10
EN

Stack Overflow用户

发布于 2019-08-12 20:58:44

使用object作为参数类型,并检查它们是否为double类型。

代码语言:javascript
复制
    public static bool Equals(object firstDouble, object secondDouble)
    {
        if(firstDouble is double && secondDouble is double)
            return Math.Abs((double)firstDouble - (double)secondDouble) <= double.Epsilon;
        throw new ArgumentException("parameter type should be double.");
    }
票数 0
EN

Stack Overflow用户

发布于 2019-08-12 20:59:30

我不知道预期大小(int,long)是多少,所以我只是给出了一个所需大小的样本

代码语言:javascript
复制
       public static bool Equals(object firstDouble, object secondDouble)
        {
            if((firstDouble.GetType() != typeof(int)) || (secondDouble.GetType() != typeof(int)))
            {
                return false;
            }
            else
            {
               return Math.Abs((int)firstDouble - (int)secondDouble) <= double.Epsilon;
            }

        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57461515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档