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