Właściwości HasValue i Value
Sprawdzaj wartości nullable i bezpiecznie uzyskuj do nich dostęp.
Właściwości HasValue i Value to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Dwie najważniejsze właściwości
Każdy typ nullable udostępnia HasValue (wartość typu bool) oraz Value (wartość bazową). Są to właściwości służące do bezpiecznego sprawdzania i odczytywania danych.
using System;
class Program {
static void Main() {
int? n = 5;
Console.WriteLine(n.HasValue);
Console.WriteLine(n.Value);
}
}HasValue sprawdza obecność wartości
HasValue ma wartość true, gdy dostępna jest rzeczywista wartość, oraz false, gdy wartością jest null.
using System;
class Program {
static void Main() {
int? a = 10;
int? b = null;
Console.WriteLine(a.HasValue);
Console.WriteLine(b.HasValue);
}
}Bezpieczne odczytywanie Value
Zawsze proszę sprawdzić HasValue przed odczytaniem Value, ponieważ odczytanie Value dla wartości null powoduje wyjątek.
using System;
class Program {
static void Main() {
int? n = 42;
if (n.HasValue) {
Console.WriteLine(n.Value * 2);
}
}
}Dostęp do Value dla wartości null powoduje wyjątek
Jeśli odczytają Państwo Value, gdy wartość nullable jest równa null, C# zgłosi wyjątek InvalidOperationException. Sprawdzenie chroni przed tym błędem.
using System;
class Program {
static void Main() {
int? n = null;
try {
Console.WriteLine(n.Value);
} catch (InvalidOperationException) {
Console.WriteLine("Caught: no value");
}
}
}GetValueOrDefault
GetValueOrDefault() zwraca wartość, jeśli jest dostępna, a w przeciwnym razie wartość domyślną typu (0 dla int, false dla bool).
using System;
class Program {
static void Main() {
int? n = null;
Console.WriteLine(n.GetValueOrDefault());
}
}GetValueOrDefault z wartością zastępczą
Proszę przekazać argument, aby wybrać własną wartość zastępczą: GetValueOrDefault(99) zwraca 99, gdy wartością jest null.
using System;
class Program {
static void Main() {
int? n = null;
Console.WriteLine(n.GetValueOrDefault(99));
int? m = 7;
Console.WriteLine(m.GetValueOrDefault(99));
}
}Wzorzec: sprawdź, a następnie użyj
Typowy wzorzec łączy HasValue i Value w przejrzyste rozgałęzienie.
using System;
class Program {
static void Describe(int? score) {
if (score.HasValue)
Console.WriteLine("Score is " + score.Value);
else
Console.WriteLine("No score yet");
}
static void Main() {
Describe(88);
Describe(null);
}
}Niejawna konwersja z powrotem
Typ nullable można przypisać do zwykłego typu dopiero po potwierdzeniu, że zawiera wartość, a następnie odczytaniu Value.
using System;
class Program {
static void Main() {
int? maybe = 15;
if (maybe.HasValue) {
int real = maybe.Value;
Console.WriteLine(real + 5);
}
}
}Wartość domyślna typu nullable
Typ nullable, któremu nie przypisano wartości, domyślnie ma wartość null, dlatego HasValue ma wartość false.
using System;
class Program {
static void Main() {
int? n = default;
Console.WriteLine(n.HasValue);
}
}Używanie w agregacjach
Proszę iterować po danych i pomijać wartości null za pomocą HasValue, aby obliczać bezpieczne sumy.
using System;
class Program {
static void Main() {
int?[] readings = { 10, null, 5, null, 8 };
int sum = 0;
foreach (var r in readings)
if (r.HasValue) sum += r.Value;
Console.WriteLine(sum);
}
}GetValueOrDefault w pętlach
GetValueOrDefault może uprościć kod, w którym wartość null powinna być traktowana jak zero.
using System;
class Program {
static void Main() {
int?[] readings = { 10, null, 5 };
int sum = 0;
foreach (var r in readings)
sum += r.GetValueOrDefault();
Console.WriteLine(sum);
}
}Szybkie sprawdzenie
Proszę sprawdzić swoją wiedzę o właściwościach typów nullable.
Podsumowanie
HasValue informuje, czy typ nullable przechowuje wartość, a Value ją odczytuje, jednak odczytanie Value dla wartości null powoduje wyjątek.
GetValueOrDefault() bezpiecznie zwraca wartość albo zastępnik (wartość domyślną typu lub podaną przez Państwa), dzięki czemu doskonale nadaje się do sumowania i bezpiecznego odczytu.
Często zadawane pytania
Czy lekcja „Właściwości HasValue i Value” jest bezpłatna?
Tak — pełny tekst „Właściwości HasValue i Value” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Właściwości HasValue i Value”?
Sprawdzaj wartości nullable i bezpiecznie uzyskuj do nich dostęp. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Właściwości HasValue i Value”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wprowadzenie do typów wartości Nullable
- Właściwości HasValue i Value
- Operatory null-coalescing
- Nullable w obliczeniach