Why is this an issue?

If you’re using a Structure, 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

Structure MyStruct ' Noncompliant

    Public Property Value As Integer

End Structure

Compliant solution

Structure MyStruct
    Implements IEquatable(Of MyStruct)

    Public Property Value As Integer

    Public Overloads Function Equals(other As MyStruct) As Boolean Implements IEquatable(Of MyStruct).Equals
        ' ...
    End Function

End Structure

Resources