ich auf den Artikel von MSDN Online Suche Guidelines for Overloading Equals() and Operator ==Seltsame Guss in Equals von MSDN bereitgestellt außer Kraft setzen
und ich sah den folgenden Code
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);
}
das Merkwürdige ist, die Besetzung in der zweiten zu widersprechen, wenn
// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if ((object)p == null)
{
return false;
}
Warum p ist wieder gegossen, um zu widerlegen? Ist es nicht genug, um diese
// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if (p == null)
{
return false;
}
zu schreiben, wenn p nicht zu TwoDPoint gegossen werden kann, dann ist es Wert null sein wird. Ich bin verwirrt, wahrscheinlich verstehe ich nicht etwas trivial ...
EDIT
Noch eine solche Besetzung in der anderen präsentiert wird Equals Methode
public bool Equals(TwoDPoint p)
{
// If parameter is null return false:
if ((object)p == null)
{
return false;
}
}
Auch hier ist es genug, um zu überprüfen, nur if(p == null)
Dies ist ein Code Geruch. Sie hätten ReferenceEquals verwenden sollen. – usr