Dlaczego porównywać TimeSpan i Guid Structs z wartością null?

Zauważyłem, że niektóre struktury .NET można porównać do wartości null. Na przykład:

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

kompiluje się dobrze (tak samo ze strukturą Guid).
Teraz wiem, że układy są typu wartościowego i powyższy kod nie powinien się kompilować, chyba że występuje przeciążenie operatora ==, który pobiera obiekt. Ale o ile mi wiadomo, nie ma.
Sprawdziłem klasę z Reflector, a także w dokumentach w MSDN.
Obaj implementują następujące interfejsy:

IComparable, IComparable<T>, IEquatable<T>

ale próbując założyć, że te same interfejsy nie pomagają:

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;
    }
}

Używam: .NET 2.0 Visual Studio 2005.

Czy ktoś ma jakiś pomysł, dlaczego? Po prostu staram się lepiej zrozumieć. Nie jest to problem, ponieważ wiem, że nie powinienem porównywać struktur do wartości null.

questionAnswers(5)

yourAnswerToTheQuestion