Short Tip #07: C# i "?" po raz kolejny

W jednej z notek z serii „Short Tip” pisałem o użyciu operatorów ? i ??. Tym razem znak zapytania pojawi się w innym kontekście.

Pierwsze założenie (plus wyjaśnienie, tak na wszelki wypadek): zakładam, że znane są pojęcia (i rozróżnienie na) Value types i Reference types. W dużym skrócie: Value types (czy „typy wartościowe” to dobre tłumaczenie?) to wszelkiego rodzaju typy wbudowane/typy przekazywane przez wartość (int, bool etc.) a także enum‚y oraz struktury. Istotną właściwością jest to, że takiej zmiennej nie można przypisać wartości null, w przeciwieństwie do zmiennej typu referencyjnego. Tyle słowem wstępu.

Ostatnie zdanie poprzedniego akapitu okazuje się być nie do końca prawdziwe, lecz trzeba do tego zaprząc dodatkowy mechanizm. Do rzeczy:

Używając interfejsu

System.Nullable<T>

, gdzie T jest właśnie typem przekazywanym przez wartość można danej zmiennej przypisać dodatkową wartość null. Przykład:

System.Nullable<bool> undefinedBool = true;
undefinedBool = null;

lub, skracając zapis i nawiązując nareszcie do tematu wpisu:

bool? undefinedBool = true;
undefinedBool = null;

Oznaczenie zmiennej jako Nullable daje dostęp do dwóch właściwości (obie są tylko-do-odczytu):

bool HasValue – informuje o tym, czy danej zmiennej została przypisana wartość (HasValue == true) lub czy jest ona niezainicjalizowana (HasValue == false)

T Value – właściwa wartość zmiennej (odwołanie się do niej, gdy HasValue == false skutkuje wyjątkiem InvalidOperationException)

O różnicach między typami przekazywanymi przez wartość a typami referencyjnymi na pewno kiedyś jeszcze napiszę, bo kilka szczegółów w ich używaniu jest godnych uwagi.

Be Sociable, Share!
czoper opublikowano dnia 2010-5-25 Kategoria: Programowanie | Tagi:, ,

Jedna odpowiedź Zostaw komentarz

    Zostaw odpowiedź

    (Ctrl + Enter)