Вопрос в заголовке, почему:
return double.IsNaN(0.6d) && double.IsNaN(x);
Вместо
return (0.6d).IsNaN && x.IsNaN;
Я спрашиваю, потому что при реализации настраиваемых структур, которые имеют особое значение с тем же значением, что и NaN, я предпочитаю второй.
Кроме того, производительность свойства обычно лучше, так как не позволяет копировать структуру в стеке, чтобы вызвать статический метод IsNaN (и поскольку мое свойство не является виртуальным, нет риска автоматического бокса). Конечно, это не проблема для встроенных типов, так как JIT может оптимизировать это легко.
Мое лучшее предположение на данный момент состоит в том, что, поскольку вы не можете иметь как свойство, так и статический метод с тем же именем в двойном классе, они предпочитают синтаксис, вдохновленный java. (На самом деле вы могли бы иметь как одно свойство get_IsNaN, так и другое статическое средство IsNaN, но оно будет запутывать на любом языке .Net, поддерживая синтаксис свойства)