Null i walidacja danych

Użytkownik może wpisać litery zamiast liczby, a plik może zniknąć. Nauczysz się odróżniać zwykłą walidację od obsługi wyjątków.

C#Technikum
CEL LEKCJI

Czego się dziś nauczysz

  • Odróżnisz null od pustego napisu i zera.
  • Użyjesz ?? oraz sprawdzenia null.
  • Zapiszesz try i catch dla konkretnego wyjątku.

Przygotowanie: lekcje 01–33. Przewidywany czas: 45–90 minut z zadaniami. Przykłady wymagają .NET 8 lub nowszego, z włączonymi ImplicitUsings i Nullable.

TEORIA

Wyjaśnienie krok po kroku

Brak wartości

string? sygnalizuje, że zmienna może zawierać null. int? może mieć liczbę albo brak liczby. null, 0 oraz pusty napis oznaczają różne rzeczy. Operator ?? wybiera prawą stronę tylko wtedy, gdy lewa jest null. Operator ?. wywołuje element tylko dla nie-null i w przeciwnym razie daje null.

Walidacja przed obliczeniem

Dla wpisanej liczby najczęściej używamy TryParse i warunków zakresu. Nie każda poprawnie sparsowana liczba ma sens jako wiek lub ocena. Dla double także NaN i nieskończoności mogą być wynikiem parsowania, więc w obliczeniach wymagających zwykłej liczby sprawdzamy double.IsFinite.

Obsługa wyjątków

try obejmuje operację, która może zgłosić wyjątek; pasujący catch obsługuje konkretny typ. finally służy do sprzątania przy wyjściu z bloku w normalnym działaniu procesu, również przy wyjątku. Nie obiecujemy jego wykonania po awarii procesu lub odcięciu zasilania. Nie ukrywaj wszystkich wyjątków pustym catch.

PRZYKŁAD

Przykład do zbadania

Wklej cały przykład do nowego projektu konsolowego jako Program.cs. Zastąp poprzednią zawartość pliku. Nie łącz kilku całych programów w jednym pliku.

Program.cs — cały plik
using System;
string? wpis = null;
Console.WriteLine(wpis ?? "Brak wpisu");

try
{
    int liczba = int.Parse("kot");
    Console.WriteLine(liczba);
}
catch (FormatException)
{
    Console.WriteLine("To nie jest liczba calkowita.");
}
Console.WriteLine("Program dziala dalej.");
Oczekiwany wynik
Brak wpisu
To nie jest liczba calkowita.
Program dziala dalej.

Co dzieje się po kolei

  • Brak wpisu jest wartością zastępczą wybraną przez ??.
  • Parse zgłasza FormatException, więc linia wypisująca liczba zostaje pominięta.
  • Po obsłużonym wyjątku wykonanie przechodzi za catch, a nie do przerwanej instrukcji.

Pobierz Program.cs

ELEMENTY WBUDOWANE

Użyte w tej lekcji elementy

Metody .NET są gotowymi narzędziami biblioteki. Instrukcje języka i nasze metody oznaczamy osobno. Właściwości, np. Length, odczytujemy bez nawiasów.

Element Wynik Działanie i ograniczenia
int.Parse(tekst) int Przetwarza tekst; zły format daje FormatException, liczba poza zakresem int daje OverflowException.
int.TryParse(tekst, out wynik) bool Próba konwersji bez tych wyjątków dla niepoprawnego tekstu.
double.IsFinite(wartosc) bool Zwraca false dla NaN i obu nieskończoności.
Console.WriteLine(wartosc) void Wyświetla wartość i koniec wiersza.
CZĘSTE BŁĘDY

Częste błędy

  • Operator ! po zmiennej nie usuwa null; wycisza analizę kompilatora.
  • ?? nie zastępuje pustego napisu.
  • Po catch program nie wraca automatycznie do try, by ponowić operację.

Wyjątki to osobny temat

Ta lekcja pokazuje try i catch w najprostszej postaci, jako zabezpieczenie danych. Zgłaszanie własnych błędów instrukcją throw, blok finally i kolejność bloków catch omawia lekcja 35.

ZADANIA

Zadania

ZAD 1Brak a pusty tekst★☆☆

Wypisz wynik tekst ?? "brak" dla null, "" oraz "Ala".

Sprawdź: Wyniki: brak, pusty wiersz, Ala.

ZAD 2Bez wyjątku★★☆

Przepisz próbę odczytania "kot" za pomocą TryParse.

Sprawdź: Komunikat o złych danych, brak przerwania programu.

ZAD 3Zakres oceny★★★

Sprawdź teksty 5, 7 i kot jako oceny 1–6.

Sprawdź: Tylko 5 jest poprawne.

PODSUMOWANIE

Sprawdź, czy rozumiesz

Wyjaśnij własnymi słowami, jak działa główny przykład i dlaczego daje taki wynik. Następnie zmień jedną daną i przewidź wynik przed uruchomieniem. Wróć do celów lekcji i sprawdź, które potrafisz już wykonać samodzielnie.

Dokumentacja: Microsoft Learn — temat tej lekcji.