Equals()表示.NET中的double值。错误的实施与否?

时间:2011-02-08 13:38:01

标签: c# equals

我一直以为“==”和Equals()给出双倍值相同的结果......但这不是真的

实施例

    var a = Double.NaN;

    Console.WriteLine(a == a);
    Console.ReadKey();

打印“错误”

    var a = Double.NaN;

    Console.WriteLine(a.Equals(a));
    Console.ReadKey();

打印“真实”!

那么,为什么浮点数的Equals()方法实现不遵循浮点数规范,这表示如果数字是NaN - 它不等于任何东西,甚至不等于它自己? < / p>

P.S我合并了我的问题,并将尽快删除另一个关于NaN的问题

P.P.S 等于实现(.NET 4,感谢Ani)

public bool Equals(double obj)
{
    return ((obj == this) || (IsNaN(obj) && IsNaN(this)));
}

0 个答案:

没有答案