フッターコンテンツにスキップ
.NETヘルプ

C# Switch Expression (開発者向けの仕組み)

C#は継続的な進化を遂げており、言語の表現力を高め、全体の開発者体験を向上させる機能を取り入れています。 これらの機能の中で、特に注目すべきはスイッチ式であり、単一の式内で複数の条件を管理するための強力で簡潔なツールとして機能します。

この包括的な探索は、C#スイッチ式の複雑さを掘り下げ、その構文、応用、利点を強調する例を提供しています。

"switch"や"case"といったキーワードの使用から、パターンマッチングや定数値、型パターンまで、この言語機能の多様な要素を航行します。 この議論は、定数パターン、関係パターン、型パターンなどのさまざまなパターンを網羅し、スイッチ式コンテキスト内でのそれらの役割を明らかにしています。

さらに、実際のシナリオにおけるスイッチ式の組み込みを検討し、その有用性を示し、その構文と実装についての理解を提供します。 スイッチ式に関する内部知識については、このC#スイッチ式に関するMicrosoftのドキュメントをご覧ください。

この記事では、スイッチ式の例を見て、そのユースケースをIronPDF C# PDFライブラリを使用してテストします。

1. スイッチ式の導入

C# 8.0で導入されたスイッチ式は、開発者が条件付きロジックを扱う方法におけるパラダイムシフトを表しています。 伝統的には、スイッチステートメントが異なる値に基づいて分岐するための理想的な選択肢でしたが、キーワードを使用する際の冗長性や柔軟性という点で制限がありました。 スイッチ式は、より表現力豊かで機能的なコードを可能にする簡潔な構文を提供することで、これらの懸念に対処します。

最も単純な形では、スイッチ式は伝統的なスイッチステートメントに似ていますが、より多用途です。それは式を評価し、その式の値に基づいて分岐を選択します。 このパラダイムシフトにより、開発者はボイラープレートを減らし、よりクリーンで読みやすいコードを書くことができます。

2. 構文と基本的な使い方

C#のswitch式の構文は直感的で、従来のswitch文になじみのある開発者にとって簡単に採用できます。 ここに基本的な例があります:

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

この例では、input変数が複数のケースに対して評価されます。 パターンが指定されたケースのいずれかにマッチすると、対応する結果がresult変数に割り当てられます。 アンダースコア(_)は伝統的なスイッチステートメントのdefaultキーワードに似たデフォルトオプションのケースを表しています。

switch式は、定数パターン、型パターン、関係パターンなどの幅広いパターンをサポートしており、複雑なシナリオを処理するための多用途なツールです。 特に列挙型を扱うときに役立ち、繰り返しのcase文を避けることができます。

3. 高度なパターンとデコンストラクション

スイッチ式の強みの一つは高度なパターンとデコンストラクションを利用できることであり、開発者は簡潔な方法でオブジェクト、配列、およびパターンから値を抽出できます。 さらに、スイッチ式はラムダ式での表現を可能にし、より機能的なプログラミングスタイルに貢献します。 Consider the following example of a switch expression:

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

4. スイッチ式対スイッチステートメント

スイッチ式は伝統的なスイッチライクな意味パターンと共通点を共有していますが、いくつかの利点を提供します。

スイッチキーワード式は簡潔で、break-caseステートメントを必要とせず、ボイラープレートコードを削減します。 switchキーワードの式はより簡潔であり、break-caseステートメントを必要とせず、ボイラープレートコードを削減します。 It also allows for the assignment of values directly within the expression, making the code more expressive.

さらに、スイッチ式は定数パターンマッチングの使用を促進し、異なるケースを扱うためのより自然で強力な方法を提供します。

5. パフォーマンスの考慮事項と制限

5. パフォーマンスの考慮事項と制限

switch式は多くの利点をもたらしますが、パフォーマンスの考慮事項を把握することが重要です。 特定のシナリオでは、特に多数のケースを扱う場合にswitch文の方がパフォーマンスが良いことがあります。 開発者はアプリケーションの特定の要件を評価し、それに応じて適切な構造を選択する必要があります。

もう1つの考慮事項は、switch式がswitch文を完全に置き換えることはできないということです。 さらに、スイッチ式はC# 8.0以降のバージョンでのみ利用可能であり、以前のバージョンをターゲットにしたプロジェクトではこの機能を利用できません。

IronPDFの際立った機能はそのHTMLからPDFへの変換機能であり、全てのレイアウトやスタイルを保持します。

The standout feature of IronPDF is its HTML to PDF Conversion function, preserving all layouts and styles. It allows for PDF generation from web content, ideal for reports, invoices, and documentation. HTMLファイル、URL、およびHTML文字列を労せずに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. IronPDFを使用した実際のアプリケーション

C#のswitch式の適用は、特に複数の条件や列挙を管理する際に、実社会のシナリオにおいて顕著な影響を与えます。これはIronPDFのユースケースに例示されています。 文書分類システムにおけるその実用性を探求してみましょう。

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

このC#コードスニペットでは、IronPDFのChromePdfRendererを使用して、模擬HTMLコンテンツをPDFドキュメントに変換しています。 生成されたPDFは、そのページ数に基づいてswitch式を使用して分類されます。

The switch expression employs a recursive pattern to categorize the document into different types, such as "Single Page Document," "Small Document," or "Large Document," depending on specific page count ranges. この簡潔で動的なアプローチは、様々なシナリオを効率的に扱うスイッチ式の多様性を示し、ドキュメントをそのプロパティに基づいて分類するための合理化された方法を提供しています。

この簡潔で動的なアプローチは、さまざまなシナリオを効率的に処理するswitch式の柔軟性を示し、文書をその特性に基づいて分類するための流れるような方法を提供します。

6.1. 出力コンソール

C# Switch式 (開発者のための動作) 図 1

7. 結論

この包括的な分析では、その構文、応用、および利点を詳しく説明し、様々なポジションパターンや"switch"や"case"キーワードを使用した例を通してその多様性を示しています。直感的な構文と基本的な使用法から高度な宣言パターンとデコンストラクション機能に至るまで、スイッチ式はクリーンで読みやすいコードを書くために非常に価値があります。

伝統的なスイッチステートメントとの比較は、その簡潔さとラムダ式や表現ボディのメンバーを含む表現力豊かな構成のサポートを強調しています。

外部ライブラリとのシームレスな統合と合理化されたPDF生成への貢献は、スイッチ式の現代のC#開発プラクティスの推進における役割をさらに強調しています。 C#が進化を続ける中で、スイッチ式は、効率的で表現力豊かな開発者向けのツールで問題解決を効果的に行うための言語のコミットメントの証として立っています。

C#が進化を続ける中、スイッチ表現は、効果的な問題解決のための効率的で表現力豊かなツールを開発者に提供するという、この言語のコミットメントを証明するものです。

よくある質問

C#のスイッチ式をどうやって文書分類に利用することができますか?

C#のスイッチ式は、文書分類システムに最適です。たとえば、IronPDFを使用してページ数などのプロパティに基づいてPDF文書を分類できます。スイッチ式の簡潔な文法により、効率的な文書の処理と並べ替えが可能です。

C#の伝統的なスイッチ文と比べて、スイッチ式はどのような利点を提供しますか?

スイッチ式は、より簡潔な文法を提供し、break-case文の必要性を排除し、直接値の割り当てをサポートします。これらの利点により、特にIronPDFなどのライブラリと統合する際には、コードがより読みやすく、保守しやすくなります。

パターンマッチングでswitch式を使用できますか?

はい、スイッチ式はさまざまなパターン、特にパターンマッチングをサポートしており、複雑なシナリオを柔軟に扱うことができます。この機能は、IronPDFのようなツールと組み合わせて、文書を効率的に分類し処理するのに利用できます。

C#におけるスイッチ式の実用的な応用例を教えてください。

スイッチ式は、文書分類、データ処理、条件ロジック管理などのアプリケーションで使用できます。IronPDFを使用することで、ページ数などの特定の属性に基づいてPDF文書を動的に分類するのに役立ちます。

C#コードの読みやすさをスイッチ式はどのように改善しますか?

スイッチ式は、ボイラープレートコードを減らし、条件管理のための簡潔な文法を提供することで読みやすさを向上させます。それにより、式本体メンバーを許可し、特にIronPDFのようなライブラリと組み合わせた場合に、コードがより機能的で理解しやすくなります。

C#でswitch式を導入したのはどのバージョンですか?

スイッチ式はC# 8.0で導入されました。この機能は、C#の以前のバージョンでは利用できないため、開発者はプロジェクトをC# 8.0以降にターゲットにする必要があります。

スイッチ式に関連するIronPDFの際立った機能は何ですか?

IronPDFの際立った機能は、HTMLからPDFへの変換にC#スイッチ式を統合する能力であり、HTMLコンテンツをPDFに変換し、ページ数などの属性に基づいて分類するための簡潔でダイナミックなハンドリングを提供しています。

IronPDFはHTMLからPDFへの変換プロセスをどのようにサポートしますか?

IronPDFは、レイアウトとスタイルを保持するHTMLからPDFへの変換機能を提供し、WebコンテンツからのシームレスなPDF生成を実現します。この機能は、レポート、請求書、文書の作成に特に役立ち、C#スイッチ式を用いた分類で強化できます。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

Jacob Mellorは、Iron Softwareの最高技術責任者であり、C# PDF技術の開拓者としてその先進的な役割を担っています。Iron Softwareのコアコードベースのオリジナルデベロッパーである彼は、創業時から製品のアーキテクチャを形作り、CEOのCameron Rimingtonと協力してNASA、Tesla、全世界の政府機関を含む50人以上の会社に成長させました。

Jacobは、1998年から2001年にかけてマンチェスター大学で土木工学の第一級優等学士号(BEng)を取得しました。1999年にロンドンで最初のソフトウェアビジネスを立ち上げ、2005年には最初の.NETコンポーネントを作成し、Microsoftエコシステムにおける複雑な問題の解決を専門にしました。

彼の旗艦製品であるIronPDFとIronSuite .NETライブラリは、全世界で3000万以上のNuGetインストールを達成しており、彼の基本コードが世界中で使用されている開発者ツールを支えています。商業的な経験を25年間積み、コードを書くことを41年間続けるJacobは、企業向けのC#、Java、およびPython PDF技術の革新を推進し続け、次世代の技術リーダーを指導しています。