Когда система. Двойной не двойной?

Посмотрев какdouble.Nan == double.NaN всегда ложно в C #, мне стало любопытно, как было реализовано равенство под капотом. Поэтому я использовал Resharper для декомпиляции структуры Double, и вот что я нашел:

public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
{
    // stuff removed...

    public const double NaN = double.NaN;

    // more stuff removed...
}

Это, кажется, указывает на структуруDouble объявляет константу, которая определяется в терминах этого специального нижнего регистраdoubleХотя я всегда думал, что эти два были полностью синонимами. Более того, если я перейду к реализации в нижнем регистре, Resharper просто прокрутит меня до объявления в верхней части файла. Аналогично, переход к реализации строчныхNaN просто приводит меня к объявлению константы ранее в строке!

Поэтому я пытаюсь понять это, казалось бы, рекурсивное определение. Это просто артефакт декомпилятора? Возможно ограничение в Resharper? Или этот строчный дубль на самом деле совсем другой зверь - представляющий что-то на более низком уровне от CLR / CTS?

Где жеNaN действительно пришел?

Ответы на вопрос(2)

Ваш ответ на вопрос