Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

September 21, 2009 / by Zsolt Soczó

Mire való az IEquatable?

Ha value type-ot írsz, és azon gyors, boxolás nélküli egyenlőségvizsgálatot akarsz csinálni, akkor implementáld ezt az interfészt.
Másképp az object.Equals fut le, ami miatt boxolni kell. Hasonló a helyzet az IComparable-lel is.
Érdemes megnézni debuggerben, mikor-mi fut le, ha implementáljuk az interfészt, és ha kikommentezzük az implementációt:

using System;
using System.Collections.Generic;

internal struct MyStruct : IEquatable
{
public MyStruct(int a)
{
this.a = a;
}

private readonly int a;

public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}

#region IEquatable Members

public bool Equals(MyStruct other)
{
return other.a == a;
}

#endregion
}
class Program
{
static void Main()
{
List l = new List {new MyStruct(33)};
l.Contains(new MyStruct(22));
}
}

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.