Почему TimeSpan и Guid Struct сравниваются с нулем?
Мы заметили, что некоторые структуры .NET можно сравнить с нулем. Например:
TimeSpan y = new TimeSpan();
if (y == null)
return;
скомпилируется очень хорошо (то же самое со структурой Guid).
Теперь я знаю, что структуры являются типом значений и что приведенный выше код не должен компилироваться, еслиs перегрузка оператора ==, который принимает объект. Но, насколько я могу судить, нетt.I»
Мы посмотрели на класс с Reflector, а также на документы по MSDN.
Два из них реализуют следующие интерфейсы:
IComparable, IComparable, IEquatable
но попытка реализовать те же интерфейсы, похоже, не помогла:
struct XX : IComparable, IComparable, IEquatable {
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.
Кто-нибудь знает, чтопричина этого? Я просто пытаюсь лучше понять. Это н'это не проблема, поскольку я знаю, что не долженв любом случае я не могу сравнивать структуры с нулем.