All articles

Mire való az IEquatable?

Published 2009-09-21 - Last modified 2009-09-21

Original: https://soci.hu/blog/index.php/2009/09/21/mire-valo-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));
}
}