0Pricing
C# Academy · Lekcja

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

  1. Wprowadzenie do typów wartości Nullable
  2. Właściwości HasValue i Value
  3. Operatory null-coalescing
  4. Nullable w obliczeniach
← Powrót do C# Academy