¿Por qué se pueden comparar TimeSpan y Guid Structs con null?

He notado que algunas estructuras .NET pueden compararse con nulas. Por ejemplo:

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

compilará bien (lo mismo con la estructura Guid).
Ahora sé que los stucts son tipo de valor y que el código anterior no debe compilarse, a menos que haya una sobrecarga del operador == que toma un objeto. Pero, por lo que pude ver, no hay.
He mirado la clase con Reflector y también los documentos en MSDN.
Los dos implementan las siguientes interfaces:

IComparable, IComparable<T>, IEquatable<T>

pero, al intentar implementar las mismas Interfaces no pareció ayudar:

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

Estoy usando: .NET 2.0 Visual Studio 2005.

¿Alguien tiene alguna idea de cuál es la razón de esto? Sólo estoy tratando de obtener una mejor comprensión. Esto no es un problema, ya que sé que no debería comparar las estructuras con nulas de todos modos.

Respuestas a la pregunta(5)

Su respuesta a la pregunta