Przejdź do treści stopki
Iron Academy Logo
Naucz się C#
Naucz się C#

Inne Kategorie

Operator Null-Conditional w C#

Gerald Versluis
13m 26s

W jednym ze swoich filmów Gerald Versluis napotkał pytanie dotyczące znaku zapytania (?) w jego przykładowym kodzie. To skłoniło go do stworzenia szczegółowego filmu wyjaśniającego operatora null-conditional w C#. Jeśli kiedykolwiek zastanawiałeś się, co robi ?. lub ?[ ] w C#, film Geralda jest doskonałym źródłem informacji, aby to zrozumieć wyraźnie. Przejdźmy przez jego wyjaśnienie krok po kroku.

Szybkie wyjaśnienie przez stronę dokumentacji

Gerald zaczyna od odniesienia do oficjalnej dokumentacji Microsoft na temat operatorów dostępu do członków i wyrażeń. Podkreśla sekcję dotyczącą operatora null-conditional, wprowadzonego w C# 6. W momencie nagrywania C# 9 był najnowszą wersją, z C# 10 na horyzoncie.

Gerald wyjaśnia, że gdy używasz a?.x lub a?[index], jeśli a jest nullem, cała wyrażenie zwraca null zamiast wyrzucania NullReferenceException. W przeciwnym razie pobiera wartość normalnie.

Chociaż dokumentacja jest pomocna, Gerald preferuje praktyczne przykłady, więc przechodzi do interaktywnego środowiska kodowania.

Przykład przez try.dot.net

Aby zademonstrować, Gerald przechodzi do try.dot.net, interaktywnego środowiska C#. Wspomina, że to narzędzie działa na Blazor, umożliwiając użytkownikom wykonywanie kodu C# bezpośrednio w przeglądarce.

Krótko pokazuje domyślny przykład ciągu Fibonacciego, który jest wstępnie załadowany w try.dot.net, a następnie czyści go, aby zacząć nowy przykład koncentrujący się na operatorze null-conditional.

Operatorzy null-conditional wyjaśnieni

Gerald tworzy prostą klasę Person z następującymi właściwościami:

public class Person
{
    // The Name property of the Person
    public string Name { get; set; }

    // A reference to another Person object representing the partner
    public Person Partner { get; set; }

    // An array representing the Person's hobbies
    public string[] Hobbies { get; set; }
}
public class Person
{
    // The Name property of the Person
    public string Name { get; set; }

    // A reference to another Person object representing the partner
    public Person Partner { get; set; }

    // An array representing the Person's hobbies
    public string[] Hobbies { get; set; }
}

Inicjalizuje obiekt Person jako null:

// Initialize a Person object as null
Person person = null;

// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);
// Initialize a Person object as null
Person person = null;

// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);

Uruchomienie tego kodu rzuca wyjątek NullReferenceException, ponieważ person jest nullem. Aby temu zapobiec, programiści zazwyczaj dodają kontrolę przed dostępem do właściwości:

// Check if the person object is not null before accessing its properties
if (person != null)
{
    Console.WriteLine(person.Name);
}
// Check if the person object is not null before accessing its properties
if (person != null)
{
    Console.WriteLine(person.Name);
}

Chociaż to działa, wprowadza dodatkowe linie kodu. Gerald wyjaśnia, jak operator null-conditional to upraszcza:

// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);
// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);

Teraz, jeśli person jest nullem, wyrażenie po prostu zwraca null zamiast wywoływać awarię.

Operator null-conditional na właściwości

Gerald rozwija przykład, konfigurując obiekt Person:

// Create a new Person object
Person person = new Person { Name = "Gerald" };

// Access the Name property safely
Console.WriteLine(person?.Name);
// Create a new Person object
Person person = new Person { Name = "Gerald" };

// Access the Name property safely
Console.WriteLine(person?.Name);

Ponieważ person nie jest nullem, poprawnie wypisuje "Gerald".

Następnie pokazuje zagnieżdżony przykład:

// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);
// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);

Jeśli person.Partner jest nullem, całe wyrażenie ocenia się na null zamiast wywoływać wyjątek. To unika niepotrzebnych warunków if.

Łączenie operatorów null-conditional

Gerald wyjaśnia, że operatory null-conditional mogą być łączone, co sprawia, że kod jest czytelniejszy przy pracy z głęboko zagnieżdżonymi obiektami. Zamiast pisać wiele kontroli null, można użyć:

// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);
// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);

Jeśli person lub person.Partner jest nullem, wynik będzie nullem, unikając błędów w czasie wykonania.

Operatorzy null-conditional na tablicach

Gerald rozszerza dyskusję na tablice i kolekcje. Dodaje tablicę Hobbies do klasy Person i pokazuje, jak bezpiecznie uzyskiwać dostęp do elementów:

// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);
// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);

Tutaj, jeśli person lub Hobbies jest nullem, wyrażenie ocenia się na null zamiast powodować wyjątek.

Wnioski

Film Geralda dostarcza dogłębnego spojrzenia na operator null-conditional w C#. Korzystając z ?. i ?[ ], programiści mogą pisać czystszy, bezpieczniejszy kod, który unika NullReferenceException. Niezależnie od pracy z właściwościami, zagnieżdżonymi obiektami czy tablicami, operator null-conditional sprawia, że kod jest bardziej zwięzły i czytelny.

Aby zobaczyć całą demonstrację, koniecznie obejrzyj film Geralda Versluisa, w którym wszystko wyjaśnia na praktycznych przykładach!

Hero Worlddot related to Operator Null-Conditional w C#
Hero Affiliate related to Operator Null-Conditional w C#

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie