これを正しく行うのにいくつか問題があったので、これがカスタム不変クラスのEqualsメソッドと等式/不等式演算子を実装する効率的な方法であるかどうかについてフィードバックがあるかどうかを尋ねたいと思いました。これらの演算子は私のプログラムによって非常に頻繁に呼び出されるので、正しく取得できるようにしたいと思います。
class MyObj
{
public static bool operator ==(MyObj a, MyObj b)
{
if (!object.ReferenceEquals(a, null))
return a.Equals(b);
else if (!object.ReferenceEquals(b, null))
return b.Equals(a);
else
// both are null
return true;
}
public static bool operator !=(MyObj a, MyObj b)
{
if (!object.ReferenceEquals(a, null))
return !a.Equals(b);
else if (!object.ReferenceEquals(b, null))
return !b.Equals(a);
else
// both are null
return false
}
public override bool Equals(object obj)
{
return this.Equals(obj as MyObj);
}
public bool Equals(MyObj obj)
{
if (object.ReferenceEquals(obj, null))
return false;
else
return (obj.FieldOne == this.FieldOne &&
obj.FieldTwo == this.FieldTwo && ...);
}
}