Skip to main content

Posts

Showing posts with the label compara

Definirea unui mecanism de comparare a entitatiilor din punct de vedere a structurii folosind IStructuralEquatable

Uneori avem nevoie sa putem compara clasele de tip POCO ca pe niste structuri. De exemplu daca avem clasa Student, dorim sa comparam entitatile de acest tip din punct de vedere a datelor pe care le contin. class Student { public string Nume{ get;set;} public string Prenume{ get;set;} public int Varsta{ get;set;} } Pentru acest lucru sa folosim IStructuralEquatable . Aceasta interfata a fost creata pentru a fi folosita in tupluri. In cazul acestora, doua tupluri sunt egale daca fiecare element din tuplu este egal din celalalt tuplu. Interfata contine doua metode: bool Equals(Object other, IEqualityComparer comparer); int GetHashCode(IEqualityComparer comparer); Prin intermediul parametrului comparer se defineste mecanismul de comparare. Exista cateva implementari in .NET pentru IEqualityComparer prin care putem sa comparam siruriile de elemente - element cu element. Valoarea default a acestui parametru este EqualityComparer > Object < .Default.Equals in cazul in care se foloseste...

IComparer generic - propietatea Default

De obicei cand dorim sa putem compara doua obiecte de acelasi tip folosim IComparar . Aceasta ne pune la dispozitie metoda int Compare(T x, T y); Valorea returnata de aceasta metoda poate sa fie: >0 - daca x este mai mare ca y; =0 - daca x este egal cu y; <0 - daca x este mai mic ca y; In cazul in care una( sau amandoua) din valori, metoda poate sa returneze: >0 - daca y este null; =0 - daca x so y sunt null; <0 - daca x este mai mic ca y; Dar pentru a putea face aceasta comparatie una din valori trebuie sa fie diferita de null, atlfel o sa avem parte de NullReferenceException . Pentru a putea rezolva aceasta problema putem sa avem ceva de genul: var valoare = x == null ? ( y == null ? 0 : -1 ) : x.CompareTo(y); Este necesar sa verificam daca una din valor este null. Valoarea lui y nu trebe sa o verificam obligatoriu, dar cea a lui x trebuie sa o verificam mereu. Pentru a rezolva acest neajuns, avem la dispozitie propietatea Default pe IComparable . Aceasta va crea automat ...