作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
示例代码:
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)
。这是因为存在从 float
到 double
的隐式转换。
在情况 3 中,没有从 double
到 float
的隐式转换,因为它可能会导致精度损失。在这种情况下,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/
示例代码: double d = 0; float f = 0; // Dump() prints result in LinqPad application (f == d).Dump(); //
我是一名优秀的程序员,十分优秀!