2015-09-23 11 views

risposta

91

No, non è equivalente - perché Version sovraccarichi l'operatore ==.

Il frammento che getta l'operando di sinistra Object è equivalente a:

if (Object.ReferenceEquals(version, null)) 

... piuttosto che chiamare il operator== implementazione in Version. È probabile che effettui un controllo di nullità come prima azione, ma questo semplicemente elude il livello extra.

In altri casi, questo può fare una differenza molto significativa. Ad esempio:

string original = "foo"; 
string other = new string(original.ToCharArray()); 
Console.WriteLine(original == other); // True 
Console.WriteLine((object) original == other); // False 
+2

@afaolek: non è necessario passare attraverso la fonte: basta consultare la documentazione e verrà visualizzato l'operatore di uguaglianza. –

+0

Utilizzando l'esempio nella risposta, quale sarà il risultato di 'Console.WriteLine ((oggetto) originale == (oggetto) altro)?'? – afaolek

+1

@afaolek: Falso di nuovo - questo non cambia nulla, perché continuerà a utilizzare il confronto di riferimento, in pratica. –

Problemi correlati