Проверьте это:
var a = Double.NaN;
Console.WriteLine(a == a);
Console.ReadKey();
Печатает «Ложь»
var a = Double.NaN;
Console.WriteLine(a.Equals(a));
Console.ReadKey();
Печатает «Верно»!
Почему печатает «Верно»? Из-за спецификации чисел с плавающей запятой значение NaN не равно самому себе! Похоже, что метод Equals () реализован неправильно ... Я что-то упустил?