_double.Equals(_float);

apo*_*pse 4 c# floating-point

示例代码:

double d = 0;
float  f = 0;

// Dump() prints result in LinqPad application

(f == d).Dump(); // 1) true
(d == f).Dump(); // 2) true

(f.Equals(d)).Dump(); // 3) false
(d.Equals(f)).Dump(); // 4) true
Run Code Online (Sandbox Code Playgroud)

1)按预期返回true
2)与上面相同
3)false - 因为我们使用Equals(object),并且它在内部检查:

  public override bool Equals(Object obj) {
        if (!(obj is Single)) {
            return false;
        }
        ...
Run Code Online (Sandbox Code Playgroud)

4)真的吗?为什么?

public override bool Equals(Object obj) {
        if (!(obj is Double)) {
            return false;
        }
Run Code Online (Sandbox Code Playgroud)

如何float通过这个if警卫?

Cha*_*ger 5

它没有.

您在案例4中使用的过载是double.Equals(double obj).这是因为,从隐式转换floatdouble.

在情况3,有一个从没有隐式转换doublefloat的,因为它可能导致精度的损失.在这种情况下,double将装箱并且您正在使用object.Equals.

您可以object.Equals通过强制转换为对象来显示实际结果:

d.Equals((object)f)).Dump(); // this will be false
Run Code Online (Sandbox Code Playgroud)

看到这个小提琴.