Warum können TimeSpan und Guid Structs mit null verglichen werden?

Ich habe festgestellt, dass einige .NET-Strukturen mit null verglichen werden können. Zum Beispiel:

  TimeSpan y = new TimeSpan();
        if (y == null)
            return;

wird gut kompiliert (das gleiche mit der Guid-Struktur).
Jetzt weiß ich, dass stucts vom Typ value sind und dass der obige Code nicht kompiliert werden sollte, es sei denn, es gibt eine Überladung von operator ==, der ein Objekt nimmt. Aber soweit ich das beurteilen kann, gibt es keine.
Ich habe mir die Klasse mit Reflector und auch die Dokumentation zu MSDN angesehen.
Die beiden implementieren die folgenden Schnittstellen:

IComparable, IComparable<T>, IEquatable<T>

Der Versuch, dieselben Schnittstellen zu implementieren, schien jedoch nicht zu helfen:

struct XX : IComparable, IComparable<XX>, IEquatable<XX> {
    public int CompareTo(Object obj) {
        return 0;
    }
    public int CompareTo (XX other){
        return 0;
    }
    public bool Equals (XX other){
        return false;
    }
    public override bool Equals(object value){
        return false;
    }
    public static int Compare(XX t1, XX t2){
        return 0;
    }
}

Ich benutze: .NET 2.0 Visual Studio 2005.

Hat jemand eine Ahnung woran das liegt? Ich versuche nur, ein besseres Verständnis zu bekommen. Dies ist kein Problem, da ich weiß, dass ich Strukturen sowieso nicht mit Null vergleichen sollte.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage