2012-02-07 17 views
7

Le documentation for the keyword "is" stabilisce che:I "si" parola chiave e la forzatura del metodo Equals

L'operatore è considera solo le conversioni di riferimento, boxe conversioni e conversioni unboxing. Altre conversioni, come le conversioni definite dall'utente , non vengono considerate.

Cosa significa in pratica? È sbagliato usarlo per verificare se una struttura è un certo tipo? Ad esempio,

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

È sbagliato, value.GetType() == typeof (Point2D) protegge da incidenti di refactoring. –

+1

È [questo] (http://stackoverflow.com/questions/983030/type-checking-typeof-gettype-or-is) il motivo? – enzom83

+0

@ enzom83 Corretto. 'is' potrebbe essere appropriato per questo caso, se ti interessa ereditare da Point2D, e vuoi che anche i bambini abbiano questa stessa logica (di default) – McKay

risposta

6

verificare se uno struct è un certo tipo è soddisfacente. La documentazione indica che gli operatori di conversione explicit e implicit definiti dall'utente non vengono valutati quando si considera se l'oggetto specificato è del tipo specificato, anche se è presente un operatore definito dall'utente che può convertirlo in tale tipo.

Problemi correlati