Я заметил, что некоторые .NET-структуры можно сравнить с null. Например:
TimeSpan y = new TimeSpan();
if (y == null)
return;
будет компилироваться просто отлично (то же самое с конструкцией Guid).
Теперь я знаю, что stucts являются типами значений и что код выше не должен компилироваться, если нет перегрузки оператора ==, который принимает объект. Но, насколько я могу судить, нет.
Я просмотрел класс с помощью 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.
Кто-нибудь знает, в чем причина? Я просто пытаюсь получить лучшее понимание. Это не проблема, поскольку я знаю, что я не должен сравнивать структуры с нулем в любом случае.