出于某种原因,我偷偷进入了该类的.NET Framework源代码,Double并发现声明==是:
public static bool operator ==(Double left, Double right) {
return left == right;
}
Run Code Online (Sandbox Code Playgroud)
每个操作员都适用相同的逻辑.
我很难找到为什么这两个操作返回不同的值:
Double.NaN == Double.NaN 回报 false Double.NaN.Equals(Double.NaN) 回报 true我有第一部分但不是第二部分的答案而不是"为什么这两个比较返回不同的值"
如果引用类型不重载相等运算符==,则将使用内置相等运算符on Object.为什么用户定义不一样structs:
struct A{ }
static void Main(string[] args)
{
A a = new A();
A a1 = new A();
bool equal= (a == a1); //error
}
Run Code Online (Sandbox Code Playgroud)
即,是否ValueType(所有structs派生的)也是过载运==算符?