Qual è il tuo approccio allo scrivere i controlli di uguaglianza per lo structs
e classes
che hai creato?Controllo di uguaglianza C#
1) Fa l'uguaglianza "pieno" controllo richiedono che gran parte del codice standard (come override Equals
, override GetHashCode
, generico Equals
, operator==
, operator!=
)?
2) Si specifica esplicitamente che le classi modellano l'interfaccia IEquatable<T>
?
3) fare ho capito bene, che non v'è alcun modo attuale di applicare automaticamente Equals
le sostituzioni, quando ho richiamare qualcosa come a == b
e ho sempre dovuto implementare entrambe le Equals
e operator==
membri?
^^ Il tuo ogni post è un capitolo di apprendimento in C# .. :) – Dienekes
2 suggerimenti minori per il secondo blocco di codice: 1) Non dovresti spostare '(object) left == (object) right' da' == 'a generico' Equals'? In modo che dia la velocità (ovviamente dipende, ma assumendo il caso peggiore) il controllo dell'eguaglianza di riferimento anche per il metodo generico 'Equals'? 2) non è necessario il secondo controllo nullo '(oggetto) a destra == null' in' == 'come lo si fa essenzialmente in generico' Equals'. Guarda il mio post .. – nawfal
@nawfal: Non penso che ci sia molto da fare nel caso generico di 'Equals' - sarà comunque veloce nei casi in cui * è * vero, e nei casi in cui * non è * vero, sta aggiungendo un assegno extra senza alcun beneficio. Per quanto riguarda la parte nulla - ciò richiederebbe di nuovo il controllo dinamico del tipo. Sì, potresti discutere per entrambi - ma sono abbastanza contento di ciò che ho scritto due anni fa ... –