Почему TimeSpan и Guid Struct сравниваются с нулем?

Я заметил, что некоторые структуры .NET можно сравнить с нулем. Например:

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

скомпилируется очень хорошо (то же самое со структурой Guid).
Теперь я знаю, что структуры являются типом значения и что приведенный выше код не должен компилироваться, если только не существует перегрузки оператора ==, который принимает объект. Но, насколько я могу судить, это не так.
Я посмотрел на класс с Reflector, а также на документы по MSDN.
Два из них реализуют следующие интерфейсы:

IComparable, IComparable<T>, IEquatable<T>

но попытка реализовать те же интерфейсы, похоже, не помогла:

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

Я использую: .NET 2.0 Visual Studio 2005.

Кто-нибудь знает, в чем причина этого? Я просто пытаюсь лучше понять. Это не проблема, поскольку я знаю, что в любом случае не следует сравнивать структуры с нулем.

Ответы на вопрос(5)

Ваш ответ на вопрос