Czyli wszystko co chcielibyście wiedzieć o null w c# a NIE boicie się zapytać
Na wstępie trzeba napisać oczywistą oczywistość: NULL jest w C# wartością... pustą.Null może wystąpić w typach referencyjnych jak i "wartościowymi" (Reference types / Value types). Do typów wartościowych można go przypisać na 2 sposoby:
int? i; NullableObie linijki robią to samo.i;
Dla typów referencyjnych będzie to po prostu:
Object o;
W kodzie bardzo często można zauważyć notoryczne sprawdzanie czy czasem jakiś obiekt nie jest nullem.
if (obj == null || i.HasValue) { //... }
inną techniką jest użycie ?? (dwa pytajniki)
Object result = obj ?? new Object()
znaczy: jeśli obj jest null, to podstaw pod result new Object();
Istnieje możliwość jeszcze takiego (pięknego) zapisu):
string result = value1 ?? value2 ?? value3 ?? String.Empty;
Nie jest to dobra praktyka tym bardziej, że jeśli gdzieś nie przewidzimy warunku wtedy dostaniemy po oczach wyjątkiem "nullreferenceexception". Dobrą obroną jest utworzenie "specjalnego przypadku" (Special case / Null object pattern). Całość sprowadza się do utworzenia podklasy, reprezentującej wartości "puste", np.:
class Osoba { string Imie {get;set;} string Nazwisko {get;set;} }
tworzymy reprezentację "nullową/specjalny warunek":
class OsobaNull : Osoba { public OsobaNull() { Imie = ""; Nazwisko = ""; } }
i tylko w jednym przypadku sprawdzamy null, tam gdzie pobieramy obiejkt typu osoba, jeśli tam wykryjemy nulla to zwracamy new OsobaNull() i nigdzie już nie potrzebujemy sprawdzać żadnych warunków. Kod się wykona ale będą tak ustawione wartości obiektu, że kod nic zlego nie zrobi i nie zakończy się błędem.
2 komentarze:
Dzięki, swietny wpis
_____________________
https://www.aptusshop.pl/sklepy-internetowe-gdansk.php
Rewelacyjny blog programistyczny. Od jakiegoś czasu mocno studiuję SQL - chcę nawet iść na kurs, ale dzięki tobie kilka rzeczy już umiem!
Prześlij komentarz