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;
}
...
}
È sbagliato, value.GetType() == typeof (Point2D) protegge da incidenti di refactoring. –
È [questo] (http://stackoverflow.com/questions/983030/type-checking-typeof-gettype-or-is) il motivo? – enzom83
@ 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