2011-12-27 7 views
8

Básicamente, me pregunto si debería escuchar a ReSharper en este caso ...Char.Equals vs Object.Equals - ReSharper sugiere que debería usar Object.Equals. ¿Debería?

te hubiera cifra que en comparación con los caracteres uno debe utilizar Char.Equals (carbón de leña) ya que evita unboxing, pero sugiere que se utilice ReSharper Object.Equals (obj). Tal vez me estoy perdiendo algo aquí?


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)) { ... } 

supongo que es porque hay un respaldo DependencyProperty?

+0

los iguales de mi comprensión compara como las cosas o distintas, por ejemplo, no podría decir Objecta == ObjectB se comprobaría que usa ObjectA.Equals (ObjectB) – MethodMan

+2

¿Cuál es la línea de código real? ¿ReSharper da algún razonamiento para su sugerencia? –

+1

mi resharper no sugiere que :) –

Respuesta

13

Es imposible anular static miembros - Object.Equals() es un miembro estático, y Charno puede anulación que, a pesar de que pueda llamada se en el tipo Char (los parámetros son todavía del tipo Object)

Por lo tanto, no importa si llama al

Object.Equals(object yourChar, object anotherChar) 

o

Char.Equals(object yourChar, object anotherChar) 

ya que el boxeo se producirá en cualquier caso.

Para evitar esto, utilice el método de instancia, que se anula en Char:

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

Esperaría que resharper me sugiera para usar la versión de instancia anulada de 'Equals'. ¿Es esto un error o no es posible detectar si hay una versión de instancia de un miembro estático a través de la reflexión? –

+0

vea el comentario de @Joe White sobre la pregunta: ReSharper es bastante útil, pero no puede hacer * todo * por usted. De hecho, cuando escribo 'Char' y luego' .Equ', ReSharper parece haber anulado IntelliSense para ** ocultar ** 'Object.Equals' ... – Adam

5

Char.Equals(control.SpecialChar, DEFAULT_CHAR) es una llamada a Object.Equals(object, object), por lo que resharper es correcto aquí.

sugeriría a utilizar control.SpecialChar.Equals(DEFAULT_CHAR) o simplemente DEFAULT_CHAR == control.SpecialChar

Cuestiones relacionadas