Skip to main content

Posts

Showing posts with the label NullReferenceException

Null object pattern - design pattern

Acest design pattern ar trebui sa ne ajute pentru a elimina sau cel putin sa reducem numarul de verificare de genul: If( obj != null ) { //Ceva cod. } Pentru a putea folosi acest design pattern este nevoie sa declaram o instanta a unui obiect( sau o clasa) care sa joace rolul obiectului care reprezinta valorea null. Exista doua varinte de implementare, de la caz la caz se poate folosi una din ele. In prima varianta se foloseste o instanta a clasei care joaca rolul de valoarea NULL. Aceasta este oferita dezvoltatorului prin intermediul unei propietati statice. public class Car { public static readonly Car NullObj; static Car { NullObj = new Car(); //Setare valori, propietati cu valori default. } } Deoarece am declarat field-ul ca fiind read-only, setarea acestuia se va putea face doar in constructor. Codul pe care o sa il folosim acuma o sa fie asemanator cu: if( car == Car.NullObj ) { //Executa ceva } In cazul in care vrem sa apelam metode sau ...

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 ...