IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# Typy Nullable (Jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 23 kwietnia 2026

Podczas pracy z C# często trzeba obsługiwac wartosci null, zwlaszcza przy typach referencyjnych. Typy nullable w C# oferuja sposob reprezentowania nieokreslonych lub zabrakujacych wartosci dla typow wartosciowych. Ten przewodnik obejmuje podstawy typow nullable w C#, ich praktyczne zastosowania oraz jak działaja w różnych sytuacjach. W dalszej części artykułu zajmiemy sie również IronPDF.

Nullable Types in C#

Domyslnie typy wartosciowe w C# (np. int, bool, DateTime) nie mogą być przypisane wartosciom null. Aby rozwiązać to ograniczenie, C# wprowadza typy wartosciowe nullable, ktore pozwalają na przypisanie null do typow wartosciowych. Typy nullable sa szczegółnie przydatne, gdy trzeba przedstawic brak ważnej wartosci.

Deklarowanie typow nullable

Aby zadeklarowac typ nullable w C#, uzyj następującej skladni:

// Declare a nullable integer
int? nullableInt = null;

Tutaj, int? jest skrótem dla Nullable<int>. Zmiennej nullableInt można przypisać wartość typu int lub null.

Sprawdzanie na null

Aby sprawdzić, czy zmienna nullable ma wartość, czy nie, można użyć właściwości HasValue albo porównać zmienną bezpośrednio z null, jak pokazano poniżej:

if (nullableInt.HasValue)
{
    // If nullableInt has a value, print it
    Console.WriteLine("Value: " + nullableInt.Value);
}
else
{
    // If nullableInt does not have a value, print a message
    Console.WriteLine("No value assigned.");
}

Alternatywnie, można uzyc operatora ??, aby zapewnic wartosc domyslna, gdy typ nullable jest nullem:

// Assign 0 if nullableInt is null
int result = nullableInt ?? 0;
Console.WriteLine("Result: " + result);

Jeśli nullableInt jest null, to result zostanie przypisane wartością domyślną 0.

Typy wartosciowe nullable a typy referencyjne nullable

W C# typy wartosciowe (takie jak int, bool, double) różnią sie od typow referencyjnych (jak string, object). Typy wartosciowe nullable pozwalają na reprezentowanie null przez typy wartosciowe, podczas gdy typy referencyjne nullable pozwalają na domyslna deklaracje typow referencyjnych jako non-nullable, zmniejszajac tym samym ryzyko wyjątków referencji null.

Typy wartosciowe nullable

Typ wartosciowy nullable pozwala na przypisanie wartosci null do typu wartosciowego. Aby zadeklarować typ nullable, dodaj znak zapytania ? do typu danych:

// Declare a nullable double
double? nullableDouble = null;

W tym przykładzie nullableDouble może przechowywać wartość double lub null.

Typy referencyjne nullable

Nullable reference types zostały wprowadzone w C# 8.0. Można je włączyć na poziomie projektu lub poprzez dodanie dyrektywy #nullable enable na początku pliku kodu. Po włączeniu nullable reference types typy referencyjne muszą być wyraźnie oznaczone jako nullable za pomocą ?, co pomaga uniknąć potencjalnych wyjątków w czasie wykonania spowodowanych przez null.

#nullable enable
// Declare a nullable string
string? nullableString = null;

Tutaj, nullableString może być null. Jeśli zadeklarujesz typ referencyjny non-nullable bez ?, kompilator wygeneruje ostrzeżenia, jeśli wykryje potencjalne przypisania null.

Włączanie typów referencyjnych nullable

Aby globalnie włączyć nullable reference types w projekcie, dodaj następującą linię do pliku .csproj:

<Nullable>enable</Nullable>
XML

Po włączeniu, kompilator będzie traktował typy referencyjne jako domyślnie non-nullable. Ta funkcja jest szczególnie przydatna do wychwytywania problemów z referencjami do null podczas kompilacji, a nie podczas wykonywania.

Praktyczne przykłady

Przyjrzyjmy się kilku praktycznym przykładom, aby utrwalić zrozumienie typów nullable.

Przykład 1: Typ nullable z typami wartościowymi

W tym przykładzie użyjemy typu nullable z int:

class Program
{
    static void Main(string[] args)
    {
        int? nullableInt = null;
        // Use null coalescing operator to assign a default value
        int b = nullableInt ?? 10;
        Console.WriteLine("b: " + b);
        if (nullableInt.HasValue)
        {
            // nullableInt has a value
            Console.WriteLine("nullableInt has value: " + nullableInt.Value);
        }
        else
        {
            // nullableInt is null
            Console.WriteLine("nullableInt is null");
        }
    }
}

Tutaj, nullableInt jest zmienną typu nullable int. Jeśli nullableInt jest null, to b przyjmie wartość 10 dzięki operatorowi złączenia null. W przeciwnym razie b przyjmie wartość nullableInt.

Przykład 2: Typy referencyjne nullable

Teraz zobaczmy, jak działają typy referencyjne nullable:

#nullable enable
class Program
{
    static void Main()
    {
        string? nullableString = null;
        string nonNullableString = "Hello";
        // Use null coalescing operator to provide a default value for length
        Console.WriteLine(nullableString?.Length ?? 0);
        Console.WriteLine(nonNullableString.Length);
    }
}

W powyższym kodzie nullableString może być null, a operator złączenia null zapewnia, że jeśli jest null, to długość ciągu jest domyślnie 0.

Przykład 3: Zagnieżdżone typy nullable

C# pozwala deklarować zagnieżdżone typy nullable. Na przykład:

// Redundant, but syntactically valid
int? nestedNullableInt = null;

Chociaż zagnieżdżone typy nullable mogą wydawać się redundantne, są składniowo poprawne w C#. Jednak w praktyce zagnieżdżone typy nullable nie oferują żadnej dodatkowej funkcjonalności i są rzadko używane.

Operator ??

Operator ?? jest często używany z typami nullable, aby zapewnić wartość domyślną, gdy typ nullable jest null. Ten operator upraszcza kod, unikając jawnych instrukcji if-else.

int? nullableValue = null;
// Assign -1 if nullableValue is null
int defaultValue = nullableValue ?? -1;

W tym przykładzie, jeśli nullableValue jest null, to defaultValue zostanie przypisane -1. W przeciwnym razie defaultValue przyjmie wartość nullableValue.

Błędy kompilacji i typy nullable

Przy włączonych typach referencyjnych nullable, C# generuje ostrzeżenia i błędy podczas kompilacji, gdy wykryje potencjalne problemy z przypisaniami null. Te błędy kompilacji pomagają wcześnie wychwycić problemy, czyniąc twój kod bardziej solidnym.

Rozważmy następujący przykład:

string? nullableString = null;
// This will produce a compiler warning because nullableString may be null
string nonNullableString = nullableString;

W tym przypadku przypisanie nullableString do nonNullableString powoduje ostrzeżenie kompilatora, ponieważ nullableString może być null, a przypisanie go do typu non-nullable może prowadzić do wyjątków w czasie wykonania.

Używanie typów nullable z IronPDF

C# Typy Nullable (Jak To Działa Dla Deweloperów): Rysunek 1 - IronPDF: C# PDF Library

IronPDF to biblioteka PDF dla C# zaprojektowana, aby pomagać deweloperom tworzyć, edytować i manipulować plikami PDF bezpośrednio w aplikacjach .NET. Można konwertować HTML na PDF, generować raporty lub nawet obsługiwac zlozone struktury dokumentów.

Typy nullable sa szczegółnie przydatne w scenariuszach generowania dynamicznych raportow, takich jak generowanie PDF dla ksiegowego z niepełna dane finansowe. Używając typow nullable, możesz obsługiwac opcjonalne pola, unikac wyjątków i zapewnic wartosci domyslne.

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        int? optionalIncome = null;  // Nullable type for optional income
        string? clientName = "Iron Dev";  // Nullable reference type for client name
        var renderer = new ChromePdfRenderer();
        string htmlContent = $@"
            <h1>Financial Report</h1>
            <p>Client Name: {clientName ?? "Unknown"}</p>
            <p>Income: {optionalIncome?.ToString() ?? "Data not available"}</p>";
        // Render the HTML to a PDF
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF to disk
        pdf.SaveAs("FinancialReport.pdf");
        Console.WriteLine("PDF Generated Successfully.");
    }
}

C# Typy Nullable (Jak To Działa Dla Deweloperów): Rysunek 2 - Przykład wyniku kodu

W tym kodzie typy nullable (int? i string?) są używane do bezpiecznego obsługiwania brakujących danych. Operator ?? zapewnia, ze jeśli jakiekolwiek dane są brakujace, w PDF zostanie uzuta wartosc domyslna.

Wnioski

C# Typy Nullable (Jak To Działa Dla Deweloperów): Rysunek 3 - strona licencyjna IronPDF

Typy nullable w C# są potężnym narzędziem do obsługi wartości null zarówno w typach wartościowych, jak i referencyjnych. Dzięki nim można uniknąć wyjątków referencyjnych null i zwiększyć odporność kodu. Pamiętaj, aby włączyć typy referencyjne nullable w nowych projektach, aby korzystać ze sprawdzania błędów podczas kompilacji. Używaj operatora ??, aby upraszczać kod przy obsłudze typów nullable.

IronPDF oferuje bezplataną wersję próbną, aby pomóc ci odkryć jego funkcje, zanim podejmiesz decyzję. Bez wstępnych opłat możesz przetestować i sprawdzić, jak wpasowuje się w twój proces deweloperski. Gdy już będziesz gotowy na kolejny krok, licencje zaczynają się od $999.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta