Giriş
Açıklaması şöyle.
Bu arayüz genellikle hash yöntemini kullanan veri yapıları (Dictionary, HashSet vb.) için gereklidir. Elimizde şöyle bir sınıf olsun
Şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle.
IEquatable arayüzü IEqualityComparer arayüzünden farklıdır. IEquatable nesnemizi kendi tipinden bir başka nesne ile karşılaştırır. IEqualityComparer ise iki nesneyi birbiriyle karşılaştırır.If you want to compare sequences of objects of some custom data type, you have to implement the IEqualityComparer generic interface in a helperclass.
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
}
Arayüzü şöyle gerçekleştiririz.public class EmployeeComparer : IEqualityComparer<Employee>{
...
}
Equals metoduŞöyle yaparız.
public bool Equals(Employee x, Employee y)
{
return string.Equals(x.Name, y.Name);
}
GetHashCode metoduŞöyle yaparız.
public int GetHashCode(Employee obj)
{
return obj.Name.GetHashCode();
}
İki değeri birleştirmek için şöyle yaparız.
public override int GetHashCode
{
return this.FirstName.GetHashCode() ^ this.LastName.GetHashCode()
}
Aslında GetHashCode içindeki algoritma çok değişkenlik gösterebiliyor. Bir sürü saçma sapan bit kaydırmalar yapan bir MSDN örneği şöyle. Daha farklı seçenekleri gösteren örnekler şöyle.
Hiç yorum yok:
Yorum Gönder