Wann ist ein System.Double kein Double?

Nachdem ich gesehen habe, wiedouble.Nan == double.NaN Ist in C # immer falsch, wurde ich neugierig, wie die Gleichstellung unter der Haube umgesetzt wurde. Also habe ich Resharper verwendet, um die Double-Struktur zu dekompilieren. Folgendes habe ich gefunden:

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

    public const double NaN = double.NaN;

    // more stuff removed...
}

Dies scheint auf die Struktur hinzudeutenDouble deklariert eine Konstante, die in diesem speziellen Kleinbuchstaben definiert istdoubleobwohl ich immer gedacht hatte, dass die beiden auch komplett waren. Darüber hinaus führt Resharper einen Bildlauf zu der Deklaration oben in der Datei durch, wenn ich die Option "Zur Implementierung wechseln" in doppelter Kleinschreibung ausführe. Ebenso springt die Umsetzung der Kleinbuchstaben anNaN Bringt mich einfach zu der konstanten Deklaration weiter oben in der Zeile!

Also versuche ich diese scheinbar rekursive Definition zu verstehen. Ist das nur ein Artefakt des Decompilers? Vielleicht eine Einschränkung bei Resharper? Oder ist dieses kleingeschriebene Doppel tatsächlich ein ganz anderes Tier - es repräsentiert etwas auf einer niedrigeren Ebene als das CLR / CTS?

Woher kommtNaN wirklich kommen aus?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage