Faulty implementation of overriden `==` operator in C#:
public class MyClass
{
public int A { get; set; }
public static bool operator ==(MyClass obj1, MyClass obj2)
{
if (obj1 == null)
{
return obj2 == null;
}
else
{
return obj1.Equals(obj2);
}
}
public static bool operator !=(MyClass obj1, MyClass obj2)
{
return !(obj1 == obj2);
}
public override bool Equals(object obj)
{
MyClass other = obj as MyClass;
if (other == null)
{
return false;
}
else
{
return A == other.A;
}
}
}
One might say it's obvious that `operator==` calls itself by using the `==` operator, but you usually do not think that way about `==`, so it's easy to fall into that trap.