示例代码:
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) true? why?
public override bool Equals(Object obj) {
if (!(obj is Double)) {
return false;
}
float
如何通过这个 if
保护?
(d.Equals((object)f)).Dump();
调用Equals(object)
方法并验证答案。 - D Stanley