Przejdź do treści stopki
POMOC .NET

Wyrażenie switch w języku C# (jak działa dla programistów)

Język C# podlega ciągłej ewolucji, wdrażając funkcje, które zwiększają jego ekspresyjność i poprawiają ogólne wrażenia programistów. Wśród tych funkcji na szczególną uwagę zasługuje wyrażenie switch, które stanowi potężne i zwięzłe narzędzie do zarządzania wieloma warunkami w ramach jednego wyrażenia.

To kompleksowe opracowanie zagłębia się w zawiłości wyrażenia switch w języku C#, przedstawiając przykłady, które podkreślają jego składnię, zastosowania i zalety.

Od dopasowywania wzorców i wartości stałych po wzorce typów oraz użycie słów kluczowych, takich jak "switch" i "case" — poruszamy się po różnorodnych elementach tej funkcji językowej. Omówienie obejmuje różne wzorce, takie jak wzorce stałe, relacyjne i typowe, wyjaśniając ich rolę w kontekście wyrażenia switch.

Ponadto analizujemy wykorzystanie wyrażeń switch w rzeczywistych scenariuszach, pokazując ich użyteczność oraz wyjaśniając ich składnię i implementację. Aby uzyskać więcej szczegółowych informacji na temat wyrażeń switch, odwiedź tę dokumentację Microsoft dotyczącą wyrażeń switch w języku C#.

W tym artykule omówimy przykłady wyrażeń switch i przetestujemy ich zastosowanie przy użyciu biblioteki IronPDF C# PDF Library.

1. Wprowadzenie do wyrażenia Switch

Wyrażenie switch, wprowadzone w C# 8.0, stanowi zmianę paradygmatu w sposobie, w jaki programiści obsługują logikę warunkową. Tradycyjnie instrukcja switch była najczęściej wybieranym rozwiązaniem do rozgałęziania na podstawie różnych wartości, ale miała ograniczenia pod względem rozbudowania i elastyczności przy użyciu słów kluczowych. Wyrażenie switch rozwiązuje te problemy, zapewniając zwięzłą składnię, która pozwala na tworzenie bardziej wyrazistego i funkcjonalnego kodu.

W najprostszej postaci wyrażenie switch przypomina tradycyjną instrukcję switch, ale jest bardziej wszechstronne. Ocenia ono wyrażenie i wybiera gałąź na podstawie wartości tego wyrażenia. Ta zmiana paradygmatu pozwala programistom pisać czystszy, bardziej czytelny kod z mniejszą ilością szablonowych fragmentów.

2. Składnia i podstawowe zastosowanie

Składnia wyrażenia switch w języku C# jest intuicyjna, co ułatwia jej przyjęcie programistom zaznajomionym z tradycyjnymi instrukcjami switch. Oto podstawowy przykład:

string result = input switch
{
    "case1" => "Result for case 1",
    "case2" => "Result for case 2",
    _ => "Default result for case label"
};
string result = input switch
{
    "case1" => "Result for case 1",
    "case2" => "Result for case 2",
    _ => "Default result for case label"
};
Dim tempVar As String
Select Case input
	Case "case1"
		tempVar = "Result for case 1"
	Case "case2"
		tempVar = "Result for case 2"
	Case Else
		tempVar = "Default result for case label"
End Select
Dim result As String = tempVar
$vbLabelText   $csharpLabel

W tym przykładzie zmienna wejściowa jest oceniana w odniesieniu do wielu przypadków. Jeśli wzorzec pasuje do jednego z określonych przypadków, odpowiedni wynik jest przypisywany do zmiennej wynikowej. Podkreślenie (_) reprezentuje domyślny przypadek opcjonalny, podobnie jak słowo kluczowe default w tradycyjnej instrukcji switch.

Wyrażenie switch obsługuje szeroki zakres wzorców, w tym wzorce stałe, wzorce typów, wzorce relacyjne i inne, co czyni je wszechstronnym narzędziem do obsługi złożonych scenariuszy. Może to być szczególnie przydatne w przypadku wyliczeń, pozwalając uniknąć powtarzających się instrukcji case.

3. Zaawansowane wzorce i dekonstrukcja

Jedną z mocnych stron wyrażenia switch jest jego zdolność do pracy z zaawansowanymi wzorcami i dekonstrukcją. Pozwala to programistom na wyodrębnianie wartości z obiektów, tablic i wzorców w zwięzły sposób. Rozważmy następujący przykład wyrażenia switch:

var result = shape switch
{
    Circle c => $"Circle with radius {c.Radius}",
    Rectangle r => $"Rectangle with dimensions {r.Length}x{r.Width}",
    _ => "Unknown shape"
};
var result = shape switch
{
    Circle c => $"Circle with radius {c.Radius}",
    Rectangle r => $"Rectangle with dimensions {r.Length}x{r.Width}",
    _ => "Unknown shape"
};
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'var result = shape switch
'{
'	Circle c => $"Circle with radius {c.Radius}",
'	Rectangle r => $"Rectangle with dimensions {r.Length}x{r.Width}",
'	_ => "Unknown shape"
'};
$vbLabelText   $csharpLabel

W tym przypadku początkowa wartość wejściowa, zmienna shape, jest rozkładana na składniki (Circle lub Rectangle), a na podstawie typu i wartości generowany jest odpowiedni komunikat.

4. Wyrażenie switch a instrukcja switch

Chociaż wyrażenie switch wykazuje podobieństwa do tradycyjnego wzorca semantycznego typu switch, oferuje kilka zalet. Wyrażenie z użyciem słowa kluczowego switch jest bardziej zwięzłe, eliminuje potrzebę stosowania instrukcji break-case i ogranicza ilość kodu szablonowego. Pozwala to również na przypisywanie wartości bezpośrednio w wyrażeniu, dzięki czemu kod staje się bardziej wyrazisty.

Kolejną godną uwagi cechą jest możliwość używania wyrażeń z wyrażenia switch w wyrażeniu lambda lub jako część elementu o treści wyrażenia w metodach lub właściwościach, co przyczynia się do bardziej funkcjonalnego stylu programowania.

Ponadto wyrażenie switch zachęca do stosowania stałego dopasowywania wzorców, zapewniając bardziej naturalny i wydajny sposób obsługi różnych przypadków.

5. Kwestie związane z wydajnością i ograniczenia

Chociaż wyrażenie switch przynosi wiele korzyści, należy pamiętać o kwestiach związanych z wydajnością. W niektórych scenariuszach instrukcja switch może być bardziej wydajna, zwłaszcza w przypadku dużej liczby przypadków. Programiści powinni ocenić konkretne wymagania swojej aplikacji i odpowiednio do nich dobrać odpowiednią konstrukcję.

Kolejną kwestią, na którą należy zwrócić uwagę, jest to, że wyrażenie switch nie może całkowicie zastąpić instrukcji switch. W niektórych przypadkach instrukcja switch, ze swoim zachowaniem typu fall-through, może być preferowanym wyborem.

Ponadto wyrażenie switch jest dostępne tylko w C# 8.0 i nowszych wersjach, więc projekty przeznaczone dla wcześniejszych wersji nie będą miały dostępu do tej funkcji.

Wyróżniającą cechą IronPDF jest funkcja konwersji HTML do PDF, zachowująca wszystkie układy i style. Umożliwia generowanie plików PDF na podstawie treści internetowych, co idealnie sprawdza się w przypadku raportów, faktur i dokumentacji. Pliki HTML, adresy URL i ciągi znaków HTML można bez trudu konwertować do formatu PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

6. Praktyczne zastosowanie z wykorzystaniem IronPDF

Zastosowanie wyrażenia switch w języku C# ma znaczący wpływ w rzeczywistych scenariuszach, zwłaszcza podczas zarządzania wieloma warunkami lub wyliczeniami, co ilustruje przykład zastosowania IronPDF. Zobaczmy, jak to działa w praktyce w systemie klasyfikacji dokumentów.

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Simulate HTML content for the PDF document
        string htmlContent = GetHtmlContent();

        // Creating IronPDF Document
        var pdfDocument = new ChromePdfRenderer();

        // Converting HTML to PDF
        var pdf = pdfDocument.RenderHtmlAsPdf(htmlContent);

        // Classifying the document based on the page count
        string classification = pdf switch
        {
            { PageCount: 1 } => "Single Page Document",
            { PageCount: >= 2 and <= 10 } => "Small Document",
            { PageCount: > 10 } => "Large Document",
            _ => "Unknown Classification"
        };

        // Save the PDF to a file
        pdf.SaveAs("document_output.pdf");

        // Displaying the classification result
        Console.WriteLine($"PDF created successfully. Document Classification: {classification}");
    }

    static string GetHtmlContent()
    {
        // In a real-world scenario, you would obtain the HTML content from an actual source.
        // For the sake of this example, we'll create a simple HTML string.
        string htmlContent = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>";
        return htmlContent;
    }
}
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Simulate HTML content for the PDF document
        string htmlContent = GetHtmlContent();

        // Creating IronPDF Document
        var pdfDocument = new ChromePdfRenderer();

        // Converting HTML to PDF
        var pdf = pdfDocument.RenderHtmlAsPdf(htmlContent);

        // Classifying the document based on the page count
        string classification = pdf switch
        {
            { PageCount: 1 } => "Single Page Document",
            { PageCount: >= 2 and <= 10 } => "Small Document",
            { PageCount: > 10 } => "Large Document",
            _ => "Unknown Classification"
        };

        // Save the PDF to a file
        pdf.SaveAs("document_output.pdf");

        // Displaying the classification result
        Console.WriteLine($"PDF created successfully. Document Classification: {classification}");
    }

    static string GetHtmlContent()
    {
        // In a real-world scenario, you would obtain the HTML content from an actual source.
        // For the sake of this example, we'll create a simple HTML string.
        string htmlContent = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>";
        return htmlContent;
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main()
		' Simulate HTML content for the PDF document
		Dim htmlContent As String = GetHtmlContent()

		' Creating IronPDF Document
		Dim pdfDocument = New ChromePdfRenderer()

		' Converting HTML to PDF
		Dim pdf = pdfDocument.RenderHtmlAsPdf(htmlContent)

		' Classifying the document based on the page count
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'		string classification = pdf switch
'		{
'			{ PageCount: 1 } => "Single Page Document",
'			{ PageCount: >= 2 and <= 10 } => "Small Document",
'			{ PageCount: > 10 } => "Large Document",
'			_ => "Unknown Classification"
'		};

		' Save the PDF to a file
		pdf.SaveAs("document_output.pdf")

		' Displaying the classification result
		Console.WriteLine($"PDF created successfully. Document Classification: {classification}")
	End Sub

	Private Shared Function GetHtmlContent() As String
		' In a real-world scenario, you would obtain the HTML content from an actual source.
		' For the sake of this example, we'll create a simple HTML string.
		Dim htmlContent As String = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>"
		Return htmlContent
	End Function
End Class
$vbLabelText   $csharpLabel

W tym fragmencie kodu C# wykorzystano ChromePdfRenderer firmy IronPDF do konwersji symulowanej treści HTML na dokument PDF. Powstały plik PDF jest następnie klasyfikowany na podstawie liczby stron przy użyciu wyrażenia switch.

Wyrażenie switch wykorzystuje wzorzec rekurencyjny do klasyfikowania dokumentu na różne typy, takie jak "dokument jednostronicowy", "mały dokument" lub "duży dokument", w zależności od konkretnych przedziałów liczby stron. Sklasyfikowany dokument jest następnie zapisywany w pliku o nazwie "document_output.pdf", a komunikat konsoli informuje o pomyślnym utworzeniu pliku PDF wraz z wynikiem klasyfikacji.

To zwięzłe i dynamiczne podejście pokazuje wszechstronność wyrażenia switch w skutecznym radzeniu sobie z różnymi scenariuszami, zapewniając usprawniony sposób kategoryzowania dokumentów na podstawie ich właściwości.

6.1. Konsola wyjściowa

Wyrażenie switch w języku C# (jak działa dla programistów) Rysunek 1

7. Podsumowanie

Wyrażenie switch w języku C#, wprowadzone w wersji C# 8.0 jako kluczowa ewolucja języka, stało się atrakcyjnym narzędziem dla programistów, pozwalającym usprawnić logikę warunkową i zwiększyć ekspresję kodu.

W niniejszym kompleksowym opracowaniu dogłębnie przeanalizowano składnię, zastosowania i zalety tego wyrażenia, pokazując jego wszechstronność na przykładach wykorzystujących różne wzorce pozycyjne i słowa kluczowe, takie jak "switch" i "case". Od intuicyjnej składni i podstawowego zastosowania po zaawansowane wzorce deklaracji i możliwości dekonstrukcji — wyrażenie switch okazało się nieocenione w tworzeniu przejrzystego, czytelnego kodu.

Porównanie z tradycyjną instrukcją switch podkreśla jego zwięzłość i obsługę konstrukcji wyrażeniowych, w tym wyrażeń lambda i elementów o treści wyrażenia. Możliwość płynnej integracji z bibliotekami zewnętrznymi oraz przyczynianie się do usprawnionego generowania plików PDF dodatkowo podkreśla rolę wyrażenia switch w rozwoju nowoczesnych praktyk programistycznych w języku C#.

W miarę ewolucji języka C# wyrażenie switch stanowi dowód zaangażowania języka w wyposażanie programistów w wydajne i ekspresyjne narzędzia do skutecznego rozwiązywania problemów.

Często Zadawane Pytania

Jak mogę używać wyrażeń switch w języku C# do klasyfikacji dokumentów?

Wyrażenia switch w języku C# idealnie nadają się do systemów klasyfikacji dokumentów. Na przykład za pomocą IronPDF można kategoryzować dokumenty PDF na podstawie takich właściwości, jak liczba stron. Zwięzła składnia wyrażeń switch pozwala na wydajną obsługę i sortowanie dokumentów.

Jakie korzyści zapewniają wyrażenia switch w porównaniu z tradycyjnymi instrukcjami switch w języku C#?

Wyrażenia switch oferują bardziej zwięzłą składnię, eliminują potrzebę stosowania instrukcji break-case i obsługują bezpośrednie przypisywanie wartości. Te zalety prowadzą do bardziej czytelnego i łatwiejszego w utrzymaniu kodu, zwłaszcza w połączeniu z bibliotekami takimi jak IronPDF do przetwarzania i klasyfikacji plików PDF.

Czy wyrażenia switch mogą być używane z dopasowywaniem wzorców w języku C#?

Tak, wyrażenia switch obsługują różne wzorce, w tym dopasowywanie wzorców, co pozwala na wszechstronną obsługę złożonych scenariuszy. Funkcjonalność tę można wykorzystać w połączeniu z narzędziami takimi jak IronPDF w celu efektywnej kategoryzacji i przetwarzania dokumentów.

Jakie są praktyczne zastosowania wyrażeń switch w języku C#?

Wyrażenia switch mogą być wykorzystywane w takich zastosowaniach, jak klasyfikacja dokumentów, przetwarzanie danych i zarządzanie logiką warunkową. Dzięki IronPDF mogą one pomóc w dynamicznej obsłudze dokumentów PDF poprzez ich klasyfikację na podstawie określonych atrybutów, takich jak liczba stron.

W jaki sposób wyrażenia switch poprawiają czytelność kodu C#?

Wyrażenia switch poprawiają czytelność poprzez ograniczenie powtarzalnego kodu i zapewnienie zwięzłej składni do zarządzania warunkami. Umożliwiają one tworzenie elementów o treści wyrażenia, dzięki czemu kod staje się bardziej funkcjonalny i łatwiejszy do zrozumienia, szczególnie w połączeniu z bibliotekami takimi jak IronPDF.

W której wersji języka C# wprowadzono wyrażenia switch?

Wyrażenia switch zostały wprowadzone w C# 8.0. Ta funkcja nie jest dostępna we wcześniejszych wersjach C#, więc programiści muszą upewnić się, że ich projekty są przeznaczone dla C# 8.0 lub nowszego, aby efektywnie wykorzystywać wyrażenia switch z bibliotekami takimi jak IronPDF.

Jaka jest wyróżniająca się cecha IronPDF w odniesieniu do wyrażeń switch?

Wyróżniającą cechą IronPDF jest możliwość integracji z wyrażeniami switch w języku C# do konwersji HTML na PDF, co pozwala programistom konwertować treści HTML na pliki PDF i klasyfikować je na podstawie atrybutów, takich jak liczba stron, przy użyciu zwięzłej i dynamicznej obsługi.

W jaki sposób IronPDF wspiera proces konwersji HTML do PDF?

IronPDF oferuje funkcję konwersji HTML do PDF, która zachowuje układy i style, umożliwiając płynne generowanie plików PDF z treści internetowych. Ta funkcja jest szczególnie przydatna do tworzenia raportów, faktur i dokumentacji, a jej możliwości można rozszerzyć za pomocą wyrażeń switch w języku C# do klasyfikacji.

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ą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie