Fondamentalmente si fa tre cose:
- Verifica di uguaglianza riferimento (ritorno vero se così)
- Verifica di nullità riferimento (ritorno false se entrambi i valori è null; ormai il nullo == caso nullo siano stati manipolati)
- Controllare per l'uguaglianza valore con
first.Equals(second)
l'ordinamento non dovrebbe importa se sia i valori hanno implementazioni di uguaglianza ben gestite, poiché l'uguaglianza dovrebbe essere implementata in modo tale che x.Equals(y)
implichi y.Equals(x)
. Tuttavia, la documentazione offline che ho installato non è stata specificata per prima.Equals (second) (o objA.equals (objB) per utilizzare la denominazione reale dei parametri). Lo online documentation non lo menziona, abbastanza interessante.
solo per fare tutto questo cemento, l'attuazione potrebbe essere la seguente:
public static bool Equals(object x, object y)
{
if (x == y) // Reference equality only; overloaded operators are ignored
{
return true;
}
if (x == null || y == null) // Again, reference checks
{
return false;
}
return x.Equals(y); // Safe as we know x != null.
}
fonte
2009-09-20 17:02:38
Deve essere evidenziato che la differenza principale tra 'Object.Equals' statici e' first.Equals (secondo) '' virtuale è che quest'ultimo ** non funzionerà ** se 'first' è un riferimento null. –