IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# Dyskryminowane unie (Jak to działa dla deweloperów)

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

Jako programista .NET pracujacy z dynamicznym generowaniem PDF za pomoca IronPDF, często potrzebujesz reprezentowac i zarządzać różnymi typami—pomyśl o różnych rodzajach danych dokumentu, komunikatach logow, rolach użytkowników lub opcjach eksportu. To tutaj pojawia sie pojecie unii wyróznionej w C#.

Chociaż C# nie ma natywnego wsparcia dla unii wyróżnionych tak, jak F# czy Rust, nadal możesz skutecznie je symulowac. W tym wpisie na blogu zglebimy jak zdefiniowac i używać typu unii wyróżnionej w C#, pokażemy, jak zastosować go z IronPDF do przetwarzania PDF w rzeczywistych sytuacjach i zbadamy korzysci, jakie ten wzorzec zapewnia—szczegółnie w połączeniu z dopasowaniem wzorca.

What Are Discriminated Unions in C#?

Unie wyróżnione, znane również jako unie oznaczone lub typy unii, pozwalają zmiennej przechowywać jedną wartosc z ograniczonego zestawu możliwych opcji, gdzie kazda opcja jest powiazana z unikalnym identyfikatorem przypadku.

W innych językach, takich jak F#, można je zdefiniowac za pomoca slowa kluczowego union. C# nie oferuje tej funkcji natywnie, ale programisci mogą zastosować sprytne kombinacje rekordów, klas i wyrażeń switch, aby je naśladować.

Na przykład:

public abstract record PdfAction;
public record GenerateReport(string ReportName) : PdfAction;
public record LogError(string Message) : PdfAction;
public record ExportToExcel(string FilePath) : PdfAction;

Każdy rekord powyżej reprezentuje pojedynczy przypadek unii. Podstawowy typ PdfAction jest wyróżnikiem.

Dlaczego Unie Wyróżnione Są Ważne w Przepływach Pracy w IronPDF

Wyobraz sobie, że tworzysz generator raportów PDF z wykorzystaniem IronPDF i musisz wykonac różne czynnosci na podstawie danych wejsciowych od użytkownika—może generować PDF, rejestrowac błędy lub eksportowac dane.

Uzycie unii rozroznialnych w C# pozwala na czyste reprezentowanie tych typow opcji, co prowadzi do bezpieczenstwa w czasie kompilacji, mniejszej liczby bledow i wyrazniejszej logiki.

Oto jak możesz to zastosować z IronPDF:

void HandlePdfAction(PdfAction action)
{
    switch (action)
    {
        case GenerateReport r:
            var pdf = new IronPdf.HtmlToPdf().RenderHtmlAsPdf("<h1>" + r.ReportName + "</h1>");
            pdf.SaveAs(r.ReportName + ".pdf");
            break;
        case LogError e:
            Console.WriteLine("Logging Error: " + e.Message);
            break;
        case ExportToExcel x:
            Console.WriteLine("Exporting to Excel at " + x.FilePath);
            break;
        default:
            throw new NotSupportedException("Unknown action");
    }
}

To podejście utrzymuje Twoj kod w ulekladzie i mocny, a także ułatwia programistom zrozumienie wszystkich możliwych opcji w jednym miejscu.

Simulating Discriminated Unions in C# – Struct vs. Record vs. Class

Chociaż C# nie posiada słowa kluczowego union, można symulowac unie wyróżnione używając:

  • Rekordy: Idealne dla niemutowalnych danych i wspierają czysto dopasowywanie wzorca.
  • Klasy: Bardziej elastyczne pod względem dziedziczenia i semantyki referencyjnej.
  • Struktury: Przydatne dla typow wartosci, ale mniej elastyczne przy pracy z typami referencyjnymi lub dziedziczeniem.

Unie rozróżniające C# (Jak to działa dla deweloperów): Rysunek 1 - Struct vs. Record vs. Class

Jeśli zalezy Ci na wydajności i usytuowaniu pamięci—for instance, w logowaniu PDF o duzej przepustowosci—możesz rozwazyc ostrożne użycie unii wyróżnionych struktur:

public interface IAction { }
public readonly struct SaveAction : IAction
{
    public string FileName { get; }
    public SaveAction(string fileName) => FileName = fileName;
}

Uwaga: Stracisz niektore korzyści z dopasowania wzorcow z strukturami, szczególnie polegając na wyrażeniach switch.

Benefits of Using Discriminated Unions in C#

Istnieje kilka kluczowych zalet przy adopcji tego wzorca inżynierii oprogramowania:

  • Bezpieczenstwo w czasie kompilacji: Uchwyt na brakujące przypadki w wyrazeniu switch przed uruchomieniem.
  • Bardziej przejrzysta logika: Łatwiej jest pisać, komentować i analizować działania w przypadku oznaczonych nazw.
  • Oddzielenie obowiazkow: Odpowiedzialnosci odniesione na danych, a nie hierarchiach typow.
  • Łatwosc refaktoryzacji: Dodawanie lub usuwanie przypadkow staje się bardziej prostoliniowe.

W połączeniu z IronPDF, to ułatwia zarządzanie wejsciem użytkownika, logiką renderingu lub tworzenie dynamicznych szablonow z różnymi potokami wartości.

Kiedy Używać Unii Wyróżnionych z IronPDF

Oto kilka praktycznych scenariuszy, w których ten wzorzec doskonale się sprawdza:

  • Przepływy pracy generowania PDF: Różne kroki w cyklu zycia dokumentu (generowanie, zapisywanie, e-mail).
  • Modele uprawnien: Reprezentowanie różnych poziomów dostępu użytkowników.
  • Systemy logowania: Uzycie typow unii wyróznionych w przypadku poziomów logowania (informacje, błędy, debugowanie).
  • Testy jednostkowe: Definiowanie działań testowych jako typów unii dla drzew logiki, które można utrzymac.
  • Opcje eksportu: Reprezentowanie lokalizacji docelowych takich jak PDF, Excel, Word jako instancje unii.

Unie rozróżniające C# (Jak to działa dla deweloperów): Rysunek 2 - Typowe scenariusze dla unii rozróżniających w aplikacjach .NET

Przykład – Obsluga Działan PDF z Zdarzeń UI

Załóżmy, że wychwytujesz zdarzenia UI i chcesz kierowac je do zadań IronPDF za pomoca unii wyróżnionych:

public abstract record UserAction;
public record GeneratePdf(string HtmlContent, string FileName) : UserAction;
public record ShowMessage(string Text) : UserAction;
public record ExitApplication() : UserAction;
void OnUserEvent(UserAction action)
{
    switch (action)
    {
        case GeneratePdf pdf:
            var renderer = new IronPdf.HtmlToPdf();
            var document = renderer.RenderHtmlAsPdf(pdf.HtmlContent);
            document.SaveAs(pdf.FileName);
            break;
        case ShowMessage msg:
            MessageBox.Show(msg.Text);
            break;
        case ExitApplication:
            Application.Exit();
            break;
    }
}

Pozwala to reprezentować zdarzenia z przejrzystą logika i zmniejsza zależność od publicznych typow obiektow lub zbyt dynamicznej obsługi.

Future Outlook – Will C# Ever Support Native Discriminated Unions?

Istnieje już propozycja dodania natywnego wsparcia dla unii wyróżnionych w C#, szczególnie w obliczu rosnącego zapotrzebowania na bardziej ekspresywne systemy typów. Chociaż język nie wprowadzil jeszcze prawdziwego slowa kluczowego union, C# nadal się rozwija—przybliżając funkcje takie jak rekordy, dopasowywanie wzorców i wyrażenia switch do pełnej funkcjonalności unii wyróżnionych.

Deweloperzy .NET zainteresowani nowoczesnymi, przyjaznymi dla funkcji konstruktami językówymi powinni uwaznie obserwowac ten obszar.

Podsumowanie

Użycie unii wyróżnionych w C# nawet bez natywnego wsparcia, może znacząco poprawić strukture i reprezentacje logiki w aplikacjach IronPDF. Wykorzystując rekordy, wyrazenia switch i klasy bazowe, sprawisz, że Twoja baza kodowa będzie bardziej czytelna, łatwiejsza do utrzymania i odporna na błedy—jednocześnie odblokowując bardziej deklaratywny i ekspresyjny sposób obsługi zadań związanych z PDF.

Jeśli jesteś inżynierem oprogramowania tworzącym nowoczesne, elastyczne aplikacje .NET, ten wzorzec musi się znaleźc w twoim narzędziowniku.

Wypróbuj za darmo dzisiaj

Gotowy, aby przeniesc swoje generowanie PDF w C# na kolejny poziom? Pobierz IronPDF i zacznij korzystać z bezpłatnej wersji próbnej. Niezaleznie od tego, czy generujesz dokumenty z HTML, logujesz eksporty, czy automatyzujesz raporty korzystając z unii wyróznionych—IronPDF daje Ci moc i wydajność, na ktore Twoja aplikacja zasluguje.

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