0Pricing
C# Academy · Lekcja

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 here

Dział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

  1. Typy nullable reprezentujące wartości
  2. Operator null-conditional
  3. Operatory null-coalescing
  4. Zabezpieczanie przed null
← Powrót do C# Academy