The .NET standard defines that the double value of NaN (Double.NaN) will never be equal to any other Double value, including itself.
In other words:
double first = Double.NaN; double second = Double.NaN; bool equal = first == second; // false;
However this does not hold for
Double.Equals checks for object 'Identity' and not object 'Equality'.
double first = Double.NaN; double second = Double.NaN; bool equal = first.Equals(second); // true;
This is in general a nice thing if you have a generic methods which rely on object equality.
Object.Equals will work even for Double and Single types.