If you’re using a struct, it is likely because you’re interested in performance. But by failing to implement IEquatable<T> you’re loosing performance when comparisons are made because without IEquatable<T>, boxing and reflection are used to make comparisons.

Noncompliant Code Example

struct MyStruct  // Noncompliant
{
  private int i;
  public int I
  {
    //...
  }
}

Compliant Solution

struct MyStruct : IEquatable<MyStruct>
{
  private int i;
  public int I
  {
    //...
  }

  public bool Equals(MyStruct other)
  {
    throw new NotImplementedException();
  }
}