Por que o TimeSpan e o Guid Structs podem ser comparados a null?
Eu notei que algumas estruturas .NET podem ser comparadas a null. Por exemplo:
TimeSpan y = new TimeSpan();
if (y == null)
return;
irá compilar muito bem (o mesmo com a estrutura Guid).
Agora eu sei que stucts são tipo de valor e que o código acima não deve ser compilado, a menos que haja uma sobrecarga de operador == que use um objeto. Mas, tanto quanto eu poderia dizer, não há.
Eu olhei para a classe com Reflector, e também nos documentos no MSDN.
Os dois implementam as seguintes interfaces:
IComparable, IComparable<T>, IEquatable<T>
mas, tentando implment as mesmas interfaces não parece ajudar:
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;
}
}
Estou usando: .NET 2.0 Visual Studio 2005.
Alguém tem alguma idéia de qual é a razão disso? Eu estou apenas tentando entender melhor. Isso não é um problema, pois sei que não devo comparar as structs para null de qualquer maneira.