sto guardando l'articolo da MSDN Guidelines for Overloading Equals() and Operator ==Strano cast Equals variazione fornita da MSDN
e ho visto il seguente codice
public override bool Equals(object obj)
{
// If parameter is null return false.
if (obj == null)
{
return false;
}
// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if ((System.Object)p == null)
{
return false;
}
// Return true if the fields match:
return (x == p.x) && (y == p.y);
}
la cosa strana è il cast di opporsi nel secondo caso
// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if ((object)p == null)
{
return false;
}
Perché p viene nuovamente assegnato all'oggetto? Non è abbastanza per scrivere questa
// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if (p == null)
{
return false;
}
Se p non può essere colato a TwoDPoint, allora il suo valore sarà nullo. Sono sconcertato, probabilmente non capisco qualcosa di banale ...
EDIT
più Uno di questi cast è presentato in un altro metodo Equals
public bool Equals(TwoDPoint p)
{
// If parameter is null return false:
if ((object)p == null)
{
return false;
}
}
Anche in questo caso è sufficiente controllare solo if(p == null)
Questo è un odore di codice. Dovrebbero aver usato ReferenceEquals. – usr