Operatory null-coalescing
Wartości domyślne ?? i ??=.
Operatory null-coalescing to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 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.
Dostarczanie wartości zastępczej
Często należy użyć wartości, jeśli istnieje, albo wartości domyślnej, jeśli wynosi null. Operator null-coalescing ?? służy dokładnie do tego.
a ?? b oznacza: użyj a, jeśli nie ma wartości null; w przeciwnym razie użyj b.
string input = null;
string name = input ?? "Guest";
System.Console.WriteLine(name);Sposób obliczania ??
Lewa strona jest obliczana jako pierwsza. Jeśli jej wartość nie jest równa null, prawa strona nie jest w ogóle obliczana.
Dzięki temu skróceniu obliczania kosztowna wartość zastępcza jest tworzona tylko wtedy, gdy rzeczywiście jest potrzebna.
string cached = "data";
string value = cached ?? Compute();
System.Console.WriteLine(value);
// Compute() is never called hereDziała z typami wartości nullable
?? rozpakowuje również typy wartości nullable. Połączenie int? maybe z ?? 0 daje zwykły, niedopuszczający null typ int.
To czytelny sposób konwersji z int? na int z użyciem wartości domyślnej.
int? maybe = null;
int sure = maybe ?? 0;
System.Console.WriteLine(sure);Działający przykład
Ten program odczytuje ustawienie, które może mieć wartość null, i używa wartości domyślnej w razie potrzeby. Proszę go uruchomić, aby zobaczyć działanie wartości zastępczej.
using System;
class Program
{
static void Main()
{
string theme = null;
string active = theme ?? "light";
Console.WriteLine("Theme: " + active);
}
}Łączenie operatorów ??
Można łączyć kilka wartości zastępczych. Wyrażenie wybiera pierwszą wartość różną od null, przechodząc od lewej do prawej.
a ?? b ?? c sprawdza kolejno a, następnie b, a na końcu używa c jako ostatecznej możliwości.
string a = null;
string b = null;
string c = "default";
System.Console.WriteLine(a ?? b ?? c);Operator ??=
Operator przypisania null-coalescing ??= przypisuje prawą stronę tylko wtedy, gdy lewa ma obecnie wartość null.
x ??= y jest skróconym zapisem if (x == null) x = y; i pozostawia x bez zmian, gdy zmienna ma już wartość.
string config = null;
config ??= "default";
System.Console.WriteLine(config);
config ??= "ignored";
System.Console.WriteLine(config);Leniwa inicjalizacja za pomocą ??=
Częstym zastosowaniem ??= jest leniwa inicjalizacja: obiekt jest tworzony dopiero przy pierwszym użyciu.
Przy kolejnych wywołaniach pole jest już ustawione, więc ??= nic nie robi.
System.Collections.Generic.List<int> items = null;
items ??= new System.Collections.Generic.List<int>();
items.Add(1);
System.Console.WriteLine(items.Count);Łączenie ?. i ??
Łączenie ?. z ?? jest bardzo częste. ?. zapobiega wystąpieniu wyjątku, a ?? dostarcza wartość, gdy łańcuch ma wartość null.
user?.Name ?? "Unknown" bezpiecznie odczytuje nazwę, używając "Unknown" jako wartości domyślnej.
string s = null;
int length = s?.Length ?? -1;
System.Console.WriteLine(length);?? w pełnym programie
W tym przykładzie ?. i ?? współpracują, aby wyświetlić bezpiecznie obliczoną długość. Proszę uruchomić program z łańcuchem null, aby zobaczyć działanie wartości zastępczej.
using System;
class Program
{
static void Main()
{
string username = null;
string display = username ?? "anonymous";
Console.WriteLine(display);
Console.WriteLine(username?.Length ?? 0);
}
}?? i zgłaszanie wyjątku dla null
Prawa strona operatora ?? może być dowolnym wyrażeniem, w tym throw. Dzięki temu ?? jest zwięzłym sposobem natychmiastowego przerwania działania w przypadku nieoczekiwanej wartości null.
name ?? throw new ArgumentNullException(nameof(name)) zwraca nazwę albo zgłasza wyjątek, jeśli ma ona wartość null.
string Validate(string name) =>
name ?? throw new System.ArgumentNullException(nameof(name));Łączność prawostronna
Operator ?? jest łączny prawostronnie, dlatego a ?? b ?? c jest grupowane jako a ?? (b ?? c).
W praktyce nadal oznacza to, że wygrywa pierwsza wartość różna od null, ale warto o tym pamiętać podczas analizowania złożonych wyrażeń.
int? a = null;
int? b = null;
int result = a ?? b ?? 99;
System.Console.WriteLine(result);Szybki test
Proszę sprawdzić, czy dobrze rozumieją Państwo operatory null-coalescing.
Podsumowanie
?? zwraca lewą stronę, jeśli nie ma ona wartości null; w przeciwnym razie zwraca prawą stronę. Operator można łączyć w łańcuchy. ??= przypisuje wartość tylko wtedy, gdy cel ma wartość null, dzięki czemu doskonale nadaje się do leniwej inicjalizacji.
Można łączyć te operatory z ?., aby bezpiecznie i zwięźle obsługiwać wartości null, a także używać ?? throw do natychmiastowego zgłaszania błędów.
Często zadawane pytania
Czy lekcja „Operatory null-coalescing” jest bezpłatna?
Tak — pełny tekst „Operatory null-coalescing” 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 „Operatory null-coalescing”?
Wartości domyślne ?? i ??=. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Operatory null-coalescing”?
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
- Typy nullable reprezentujące wartości
- Operator null-conditional
- Operatory null-coalescing
- Zabezpieczanie przed null