2011-12-27 18 views
8

Fondamentalmente, mi chiedo se dovrei ascoltare ReSharper in questo caso ...Char.Equals vs Object.Equals - ReSharper suggerisce che dovrei usare Object.Equals. Dovrei?

È piacerebbe figura che il confronto di caratteri si dovrebbe usare Char.Equals (char) poiché evita unboxing, ma ReSharper suggerisce di utilizzare Object.Equals (obj). Forse mi manca qualcosa qui?


private const DEFAULT_CHAR = '#'; 

// DependencyProperty backing 
public Char SpecialChar 
{ 
    get { return (Char)GetValue(SpecialCharProperty); } 
} 

// ReSharper - Access to a static member of a type via a derived type. 
if (Char.Equals(control.SpecialChar, DEFAULT_CHAR)) { ... } 

sto cercando di indovinare è perché c'è un supporto DependencyProperty?

+0

Il Equals dalla mia comprensione confronta come le cose o diverse, ad esempio, non si direbbe Objecta == ObjectB si dovrebbe verificare che utilizza ObjectA.Equals (ObjectB) – MethodMan

+2

Qual è l'effettiva riga di codice? ReSharper fornisce qualche ragionamento per il suo suggerimento? –

+1

il mio resharper non lo suggerisce :) –

risposta

13

E 'impossibile ignorare static membri - Object.Equals() è un membro statico, e Charnon può di esclusione, anche se è possibile chiamata esso sul tipo Char (i parametri sono ancora di tipo Object)

Pertanto, non fa differenza se si chiama

Object.Equals(object yourChar, object anotherChar) 

o

Char.Equals(object yourChar, object anotherChar) 

dal pugilato avverrà in entrambi i casi.

Per evitare questo, utilizzare il metodo di istanza, che viene sovrascritto in Char:

if (yourChar.Equals(anotherChar)) doSomething(); 
+0

Mi aspetterei che il ricercatore mi suggerisca per usare la versione dell'istanza sovrascritta di 'Equals'. Si tratta di un bug o non è possibile rilevare se esiste una versione di istanza di un membro statico tramite riflessione? –

+0

vedi il commento di @Joe White sulla domanda: ReSharper è molto utile, ma non può fare * tutto * per te. Infatti, quando digito 'Char' e poi' .Equ', ReSharper sembra aver sovrascritto IntelliSense per ** nascondere ** 'Object.Equals' ... – Adam

5

Char.Equals(control.SpecialChar, DEFAULT_CHAR) è una chiamata a Object.Equals(object, object), quindi il programma di ricerca è corretto qui.

Vorrei suggerire di utilizzare control.SpecialChar.Equals(DEFAULT_CHAR) o semplicemente DEFAULT_CHAR == control.SpecialChar