Web Log di Adrian Florea

"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
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

EqualsDefault e l'Equals statico della System.Object

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:

return object.Equals(t, default(T));

Print | posted on domenica 29 ottobre 2006 14:24 | Filed Under [ Carillon .NET Pattern Dappertutto ]

Powered by:
Powered By Subtext Powered By ASP.NET