C#’ta IEquatable Interface’i İle Nesne Karşılaştırma
Merhaba,
Elimizde T tipinden bir Entity bulunsun ve bu entityden birer koleksiyon ve nesne olduğunu varsayalım. Ben genellikle elimdeki nesnenin, koleksiyonun Contains metodu aracılığıyla varlığı ya da yokluğu hakkında net bilgi alamadım. İşte böyle bir durumda IEquatable Interface’i ile karşılaştım.
IEquatable Interface’i, mirası sınıfa Equals metodunu uygulatan ve bu metod aracılığıyla nesne karşılaştırmamızı yaptıran bir yapıdır.
Örnek olarak aşağıdaki yapıyı Entityi ele alalım.
class Nesne
{
public int A { get; set; }
public string B { get; set; }
public bool C { get; set; }
}
Şimdi bu sınıfımıza IEquatable Interface’ini uygulayalım.
class Nesne: IEquatable<Nesne>
{
public int A { get; set; }
public string B { get; set; }
public bool C { get; set; }
public bool Equals(Nesne other)
{
return
this.A == other.A &&
this.B == other.B &&
this.C == other.C;
}
}
Yukarıdaki kod bloğunu incelerseniz eğer “Nesne” tipimizde Equals metodu sayesinde verisel bir karşılaştırma gerçekleştirebiliyoruz.
class Program
{
static void Main(string[] args)
{
Nesne nesne1 = new Nesne { A = 1, B = "1", C = true };
Nesne nesne2 = new Nesne { A = 1, B = "1", C = true };
Console.WriteLine(nesne1.Equals(nesne2));
Console.Read();
}
}
Gördüğünüz gibi nesneleri property değerlerine göre karşılaştırmaktadır.
class Program
{
static void Main(string[] args)
{
Nesne nesne1 = new Nesne { A = 1, B = "1", C = true };
Nesne nesne2 = new Nesne { A = 2, B = "2", C = false };
Console.WriteLine(nesne1.Equals(nesne2));
Console.Read();
}
}
Peki Nesne Tipinden Bir Koleksiyonda Karşılaştırmayı Nasıl Yapacağız? diye sorarsanız eğer aşağıdaki kod bloğunu inceleyiniz.
class Program
{
static void Main(string[] args)
{
List<Nesne> Nesneler = new List<Nesne> {
new Nesne { A = 1, B = "1", C = true },
new Nesne { A = 2, B = "2", C = false },
new Nesne { A = 3, B = "3", C = true },
new Nesne { A = 4, B = "4", C = false },
new Nesne { A = 5, B = "5", C = true },
new Nesne { A = 6, B = "6", C = false }
};
Nesne nesne = new Nesne { A = 4, B = "4", C = false };
var _Nesne = Nesneler.FirstOrDefault(n => n.Equals(nesne));
Console.WriteLine(_Nesne.A + " " + _Nesne.B + " " + _Nesne.C);
Console.Read();
}
}
Gördüğünüz gibi IEquatable Interface’i bu şekilde bir kullanım kolaylığı sağlamaktadır. Eee aklınızun köşesinde bulunsun, lazım olursa bi el atarsınız… 🙂
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…



