Kiedy jest System.Double nie podwójne?

Po zobaczeniu jakdouble.Nan == double.NaN jest zawsze fałszywy w C #, zaciekawiło mnie, jak została wprowadzona równość pod maską. Użyłem Resharper do dekompilacji struktury Double i oto co znalazłem:

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

    public const double NaN = double.NaN;

    // more stuff removed...
}

To wydaje się wskazywać na strukturęDouble deklaruje stałą, która jest zdefiniowana w odniesieniu do tej specjalnej małej literydouble, choć zawsze myślałem, że te dwa są całkowicie synonimami. Co więcej, jeśli I Go To Implementation na podwójnej małej czcionce, Resharper po prostu przewinie mnie do deklaracji u góry pliku. Podobnie przeskakiwanie do implementacji małych literNaN po prostu zabiera mnie do stałej deklaracji wcześniej w linii!

Próbuję więc zrozumieć tę pozornie rekurencyjną definicję. Czy to tylko artefakt dekompilatora? Być może ograniczenie w Resharper? Czy też ta mała litera podwaja zupełnie inną bestię - reprezentującą coś na niższym poziomie od CLR / CTS?

GdzieNaN naprawdę pochodzi?

questionAnswers(2)

yourAnswerToTheQuestion