gpt4 book ai didi

c# - _double.Equals(_float);

转载 作者:太空狗 更新时间:2023-10-30 00:30:22 25 4
gpt4 key购买 nike

示例代码:

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

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

  public override bool Equals(Object obj) {
if (!(obj is Single)) {
return false;
}
...

4)是真的吗?为什么?

public override bool Equals(Object obj) {
if (!(obj is Double)) {
return false;
}

float 如何通过这个 if 守卫?

最佳答案

不是。

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

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

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

d.Equals((object)f)).Dump(); // this will be false

参见 this fiddle .

关于c# - _double.Equals(_float);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com