This post originated from an RSS feed registered with .NET Buzz
by Adrian Florea.
Original Post: EqualsDefault e l'Equals statico della System.Object
Feed Title: Web Log di Adrian Florea
Feed URL: /error.aspx?aspxerrorpath=/adrian/Rss.aspx
Feed Description: "You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
A volte, un umile metodo come l'Equals statico della classe System.Object può rendersi sorprendentemente utile. Per esempio, in una classe generica in cui il type parameter T può essere sia una class che una struct, abbiamo la necessità di controllare che un'istanza di T sia default(T).
class Foo<T> { public bool EqualsDefault(T t) { /* ? */ } }
Senza l'Equals statico le soluzioni sono abbastanza bruttine:
non possiamo avere t == null perché T può essere una struct;
non possiamo avere t == default(T) per l'errore CS0019 ("Operator '==' cannot be applied to operands of type 'T' and 'T'");
non possiamo avere t.Equals(default(T)) perché se t è null, abbiamo NullReferenceException.
Utilizzando l'Equals statico invece, la soluzione diventa banale: