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

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

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

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

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

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

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

1. スイッチ式の導入

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

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

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

C#スイッチ式の構文は直感的で、伝統的なスイッチステートメントに慣れている開発者にとっては取り入れやすいです。 基本例を以下に示します。

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キーワードに似たデフォルトオプションのケースを表しています。

スイッチ式は定数パターン、型パターン、関係パターンなどを含む広範囲のパターンをサポートしており、複雑なシナリオを扱うための多用途なツールです。 特に列挙体を扱う際に便利であり、繰り返しのcaseステートメントを避けることができます。

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

スイッチ式の強みの一つは高度なパターンとデコンストラクションを利用できることであり、開発者は簡潔な方法でオブジェクト、配列、およびパターンから値を抽出できます。 スイッチ式の次の例を考えてみましょう。 このケースでは、初期のインプット値であるshape変数がそのコンポーネント(CircleまたはRectangle)に分解され、型と値に基づいて適切なメッセージが生成されます。

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ステートメントを必要とせず、ボイラープレートコードを削減します。 また、式内で値を直接割り当てることができ、コードをより表現力豊かにします。 もう一つの注目すべき特徴は、スイッチ式からの表現をラムダ式やメソッドやプロパティ内の表現ボディのメンバーの一部として使用でき、より機能的なプログラミングスタイルに貢献することです。

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

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

スイッチ式は多くの利点をもたらしますが、パフォーマンスの考慮事項を把握することが重要です。

一部のシナリオでは、特に多くのケースを扱う場合、スイッチステートメントの方がパフォーマンスが高いことがあります。 開発者はアプリケーションの特定の要件を評価し、適切な構造を選択する必要があります。 別の考慮すべき点は、スイッチ式がスイッチステートメントを完全に置き換えることができないことです。

フォールスルーの動作を持つスイッチステートメントが好まれることがあるケースもあります。 さらに、スイッチ式はC# 8.0以降のバージョンでのみ利用可能であり、以前のバージョンをターゲットにしたプロジェクトではこの機能を利用できません。

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

レポート、請求書、ドキュメンテーションに理想的なウェブコンテンツからのPDF生成を可能にします。 ## 6. IronPDFとの実際のアプリケーション 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

C#スイッチ式の実用性は、特に複数の条件や列挙体を管理する際の実際のシナリオで顕著であり、IronPDFの使用例で説明されています。

文書分類システムでの実用性を探ってみましょう。 このC#コードスニペットでは、IronPDFのChromePdfRendererがシミュレートされたHTMLコンテンツをPDFドキュメントに変換するために使用されています。

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

その後、生成されたPDFのページ数に基づいてスイッチ式を用いた分類が行われます。 スイッチ式は再帰的パターンを使用して、特定のページ数範囲に応じて"シングルページドキュメント"、"小さいドキュメント"、または"大きいドキュメント"などに分類します。

分類されたドキュメントはその後"document_output.pdf"という名前のファイルに保存され、コンソールメッセージにより、PDFの作成成功とその分類結果が伝達されます。 この簡潔で動的なアプローチは、様々なシナリオを効率的に扱うスイッチ式の多様性を示し、ドキュメントをそのプロパティに基づいて分類するための合理化された方法を提供しています。

6.1. 出力コンソール

C#スイッチ式(開発者にとっての動作方法)図1

C# 8.0で言語の重要な進化として導入されたC#スイッチ式は、条件付きロジックを合理化し、コードの表現力を高めるための説得力のあるツールとして登場しました。

7. 結論

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

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

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

As C# continues to evolve, the switch expression stands as a testament to the language's commitment to empowering developers with efficient and expressive tools for effective problem-solving.

よくある質問

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

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

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

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

C#でスイッチ式をパターンマッチングと共に使用することができますか?

はい、スイッチ式はさまざまなパターン、特にパターンマッチングをサポートしており、複雑なシナリオを柔軟に扱うことができます。この機能は、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#スイッチ式を用いた分類で強化できます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。