2012-02-07 20 views
7

Los estados que documentation for the keyword "is":el "es" palabra clave y la anulación del método Equals

El operador sólo se considera conversiones de referencia, boxeo conversiones y conversiones unboxing. No se tienen en cuenta otras conversiones, como conversiones definidas por el usuario.

¿Qué significa en la práctica? ¿Es incorrecto usarlo para verificar si una estructura es de cierto tipo? Por ejemplo,

public struct Point2D 
{ 
    public int X; 
    public int Y; 

    ... 

    public override bool Equals(Object value) 
    { 
     if (value != null && value is Point2D) // or if (value != null && GetType() == value.GetType()) 
     { 
      Point2D right = (Point2D)value; 
      return (X == right.X && Y == right.Y); 
     } 
     else return false; 
    } 

    ... 
} 
+1

Es erróneo, value.GetType() == typeof (Point2D) lo protege contra accidentes de refactorización. –

+1

Es [este] (http://stackoverflow.com/questions/983030/type-checking-typeof-gettype-or-is) el motivo? – enzom83

+0

@ enzom83 Eso es correcto. 'is' podría ser apropiado para este caso, si le importa heredar de Point2D y desea que los niños también tengan esta misma lógica (de manera predeterminada) – McKay

Respuesta

6

comprobar si un struct es un cierto tipo está bien. La documentación significa que los operadores de conversión explicit y implicit definidos por el usuario no se evalúan al considerar si el objeto dado es del tipo especificado, incluso si hay un operador definido por el usuario que puede convertirlo a dicho tipo.

Cuestiones relacionadas