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

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

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

    public const double NaN = double.NaN;

    // more stuff removed...
}

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

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

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

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

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