Sprawdzanie, czy obiekt lub przekazywany parametr nie jest null, jest najczęściej powtarzanym kawałkiem kodu. C# oferuje kilka sposobów, aby to osiągnąć. Ten wpis ma na celu Wam je przybliżyć.

6 sposobów na sprawdzenie, czy obiekt jest null

Często w naszych aplikacjach chcemy wykonać jakiś kod tylko wtedy, kiedy jakiś obiekt nie jest null, np. wywołać metodę ze sprawdzanego obiektu. Poniżej przedstawiam 6 różnych sposobów na osiągnięcie tego.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Overcoded overcoded = GetOvercoded();

// 1. Operator porównania
if (overcoded != null) overcoded.Code("1.");

// 2. Null propagator - dostępne od wersji C# 6
overcoded?.Code("2.");

// 3. Z użyciem keyword 'is' - dostępne od wersji C# 7
if (!(overcoded is null)) overcoded.Code("3.");

// 4. Można też sprawdzić czy obiekt jest obiektem ;)
if (overcoded is object) overcoded.Code("4.");

// 5. Czy obiekt jest obiektem w inny sposób - trochę haxorski 8). Od C# 8
if (overcoded is { }) overcoded.Code("5.");

// 6. Pattern matching 'is not'. Od C# 9
if (overcoded is not null) overcoded.Code("6.");

Jak widzimy, prawie każda nowa wersja C# dodawała kolejny wariant sprawdzania, czy coś jest null. Który sposób jest Waszym ulubiony?

Rzucanie wyjątku, gdy przekazany parament jest null

Kolejną częstą sytuacją jest sprawdzanie, czy podczas tworzenia obiektu przekazywane parametry nie są null. W przeciwnym przypadku chcemy nie dopuścić do stworzenia takiego obiektu i rzucić wyjątek (np. ArgumentNullException).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Overcoded
{
    public string Name { get; private set; }

    // 1. Standardowe sprawdzenie
    public void UpdateName1(string name)
    {
        if (name == null) throw new ArgumentNullException("name");
        Name = name;
    }

    // 2. null-coalescing - C# 7.3
    public void UpdateName2(string name)
    {
        Name = name ?? throw new ArgumentNullException("name");
    }

    // 3. C# 10 i .NET 6.0
    public void UpdateName3(string name)
    {
        ArgumentNullException.ThrowIfNull(name);
        Name = name;
    }

    // 4. Metoda rzuci ArgumentNullException, jeżeli name będzie null. C# 11 - preview
    public void UpdateName4(string name!!)
    {
        Name = name;
    }

}

Ciekawie wygląda propozycja numer 4 z użyciem operatora !! (dwa wykrzykniki). Na razie operator ten jest dostępny w wersji C# 11 preview i nie wiadomo, czy znajdzie się w ostatecznej wersji, ponieważ wielu osobom ze społeczności taki zapis się nie podoba. 🤔

Podsumowanie

Język C# w ostatnich latach dynamicznie się rozwija i zaczyna oferować wiele nowych możliwości, o których warto widzieć. Wliczając w to trywialne sprawdzenie, czy obiekt jest null. 😉