IRONSOFTWAREHOME
開発者向けアップデート

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

Jacob Mellor、Ironチームの最高技術責任者(CTO)
Jacob Mellor
Updated: 2026年4月23日

C#でPDFファイルを扱う場合、異なる種類のドキュメント、アクション、データソースを処理することがよくあります。 伝統的には、開発者は長いif-elseチェーンやネストされたswitch文に依存してさまざまな入力値や種類、または出力の決定を管理しました。 しかし、現代のC#の機能であるswitchパターンマッチングを使用すると、コードはより優雅で、読みやすく、保守しやすくなります。

強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングを利用して、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます。 この記事では、C#の高度なパターンマッチング機能(型パターン、プロパティパターン、関係パターンなど)をIronPDFと組み合わせて、PDF生成のワークフローを合理化する方法を探ります。

What is Switch Pattern Matching in C#?

スイッチパターンマッチングは、C# 7で導入され、その後のバージョンで継続的に改良された機能です。 従来の定数値のみをマッチングするスイッチ文とは異なり、パターンマッチングによって1つの式で型、プロパティ、および条件を評価することができます。 次の例がこの機能の動作を示しています。

例の構文

switch (input)
{
    case int i when i > 0:
        Console.WriteLine("Positive integer");
        break;
    case string s:
        Console.WriteLine($"It's a string: {s}");
        break;
    default:
        Console.WriteLine("Unknown type");
        break;
}

このコードは、タイプパターン、関係演算子、およびnull定数パターンを使用して、複数のケースを簡潔に処理します。 この技法は、より簡潔な構文でコードの可読性を大幅に向上させ、より複雑なロジックをサポートします。

なぜIronPDFとスイッチパターンマッチングを組み合わせるのですか?

C# スイッチパターンマッチング(開発者向け動作方法):図1 - IronPDF ホームページ

IronPDFは、HTML、画像、または生テキストからPDFを生成および操作するための強力な.NETコンポーネントです。 多くの実際の使用ケースは、さまざまな入力パターンを処理します: 一部のドキュメントはURLから起源を持ち、他はHTML文字列から、さらに他はファイルアップロードからのものです。

複雑なif条件を用いた表現をテストするのではなく、スイッチパターンマッチングを使用すると、効率的にパターンベースのロジックをサポートすることができます。 これは、アプリケーションが異なるオブジェクトタイプ、指定された定数、または単にブール式にどのように応答するかを定義でき、入力式自体を使ってワークフローを駆動します。

IronPDFでのパターンマッチングを用いた共通の使用ケース

前の例では基本的な構文の見た目を見ましたが、今度はアクションで見てみましょう。 次のコード例は、IronPDFとC#のパターンマッチングを組み合わせることで恩恵を受けるいくつかの実世界のPDFタスクです。

1.型とプロパティパターンを用いた複数の入力形式の処理

メソッドがさまざまな入力形式(HTML、Uri、ローカル.htmlファイル)を受け入れるとしましょう。型パターン、プロパティパターン、およびnullパターンを使用して、これらのケースを簡単に区別できます。

using System;
using System.IO;
using IronPdf;
class Program
{
    static void Main()
    {
        object input = new Uri("https://example.com"); // Try changing this to: "<html><body>Hello</body></html>" or new FileInfo("sample.html")
        var renderer = new ChromePdfRenderer();
        PdfDocument pdfDoc = input switch
        {
            string html when html.StartsWith("<html>") =>
                renderer.RenderHtmlAsPdf(html),
            Uri url =>
                renderer.RenderUrlAsPdf(url.ToString()),
            FileInfo { Extension: ".html" } file =>
                renderer.RenderHtmlAsPdf(File.ReadAllText(file.FullName)),
            null => throw new ArgumentNullException("Input was null."),
            _ => throw new ArgumentException("Unsupported input type for PDF conversion.")
        };
        pdfDoc.SaveAs("example-input-types.pdf");
        Console.WriteLine("PDF created: example-input-types.pdf");
    }
}

ここでは、プロパティパターン(FileInfo { Extension: ".html" })とnull定数パターン(case null)がロジックをより表現力豊かで強力なものにします。

2. ポジショナルおよび宣言パターンでPDFを動的にフォーマットする

フォーマット文字列を含むPdfRequestレコードを使用するとしましょう。 位置パターン、宣言パターン、および文字列定数を適用してPDFのフォーマットをカスタマイズできます。

using System;
using IronPdf;
public record PdfRequest(string Title, string Content, string Format);
class Program
{
    static void Main()
    {
        PdfRequest request = new("My Report", "<h1>Monthly Report</h1><p>Generated by IronPDF.</p>", "A4");
        var renderer = new ChromePdfRenderer();
        // Use fully qualified enum to avoid IronWord conflict
        renderer.RenderingOptions = request switch
        {
            PdfRequest { Format: "A4" } => new IronPdf.ChromePdfRenderOptions
            {
                PaperSize = IronPdf.Rendering.PdfPaperSize.A4
            },
            PdfRequest { Format: "Letter" } => new IronPdf.ChromePdfRenderOptions
            {
                PaperSize = IronPdf.Rendering.PdfPaperSize.Letter
            },
            _ => new IronPdf.ChromePdfRenderOptions
            {
                PaperSize = IronPdf.Rendering.PdfPaperSize.Legal // Fallback
            }
        };
        var pdf = renderer.RenderHtmlAsPdf(request.Content);
        pdf.SaveAs("example-formatted.pdf");
        Console.WriteLine("PDF created: example-formatted.pdf");
    }
}

この使用法は、期待される値に基づいて論理パターンに従い、式がレコード内の対応するプロパティと一致する方法を示しています。

出力サイズ

C# スイッチパターンマッチング(開発者向け動作方法):図2 - PDF 出力のサイズの違い

3.変数およびノットパターンを使用した役割ベースのPDF

Use var patterns and not patterns to handle user roles while avoiding null or unexpected states.

using System;
using IronPdf;
public abstract record UserRole;
public record Admin(string Email) : UserRole;
public record Viewer(string Email) : UserRole;
public record Guest() : UserRole;
class Program
{
    static void Main()
    {
        UserRole currentUser = new Admin("admin@example.com"); // Try changing to Viewer or Guest
        var pdf = currentUser switch
        {
            Admin { Email: var email } =>
                new ChromePdfRenderer().RenderHtmlAsPdf($"<h1>Admin Dashboard</h1><p>Email: {email}</p>"),
            Viewer =>
                new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Viewer Summary</h1><p>Access limited.</p>"),
            Guest =>
                new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Guest Mode</h1><p>Please sign in.</p>"),
            not null =>
                throw new UnauthorizedAccessException("Unknown role type."),
            null =>
                throw new ArgumentNullException("Role cannot be null.")
        };
        pdf.SaveAs("example-role.pdf");
        Console.WriteLine("PDF created: example-role.pdf");
    }
}

この構造は、セキュリティとコードの可読性を向上させ、var emailのような一時的な変数宣言を利用できます。 次の画像は、異なる入力値に基づいて作成されたさまざまなPDFドキュメントを示しています。

C# スイッチパターンマッチング(開発者向け動作方法):図3 - 役割ベースの出力

4.ユーザーデータに基づいた関係パターンマッチング

ユーザーレベルによって異なるPDFを生成する必要がありますか? 入力が特定の範囲内にあるかどうかをテストするための2つの関係パターンを試してみてください。

using System;
using IronPdf;
class Program
{
    static void Main()
    {
        int userScore = 85; // Try other values: 45, 70, 101
        string message = userScore switch
        {
            < 60 => "Needs Improvement",
            >= 60 and < 80 => "Satisfactory",
            >= 80 and <= 100 => "Excellent",
            _ => "Invalid score"
        };
        var html = $"<h1>Score Report</h1><p>Score: {userScore}</p><p>Result: {message}</p>";
        var pdf = new ChromePdfRenderer().RenderHtmlAsPdf(html);
        pdf.SaveAs("example-score.pdf");
        Console.WriteLine("PDF created: example-score.pdf");
    }
}

関係演算子とブール式は、コードを簡潔で表現力豊かに保ちます。

出力

C# スイッチパターンマッチング(開発者向け動作方法):図4 - スコアベースの出力

このパターンをプロジェクトに実装するためのヒント

C# スイッチパターンマッチング(開発者向け動作方法):図5 - C# パターンマッチングチートシート

  • レコード型を使用して、クリーンで不変なデータオブジェクトを使用します。
  • switch式を推奨して、if-elseツリーよりもクリーンなロジックを基にしています。
  • notパターン破棄パターン(_)を使用して、無関係なマッチを無視します。
  • デフォルトのケースを追加して、未知の入力を早期にキャッチします。
  • 複雑なケースを分けて、可読性のためにヘルパーメソッドに落とし込みます。

実世界の利点

***よりクリーンなコード:**深くネストされた if-else や switch-case ブロックはなくなりました ***テストの簡素化:**分離されたパターンケースによりユニットテストが簡素化されます ***柔軟性:**新しい入力タイプを追加するときにロジックを簡単に拡張できます ***関心の分離の改善:**入力/出力変換のみにロジックを集中

結論: PDFロジックを近代化する

スイッチパターンマッチングは単なる構文的な改善以上のもので、より安全で表現力豊かなコードを書くための強力なパラダイムです。 IronPDFの柔軟なレンダリング機能と組み合わせて、最小限のコードでよりスマートでスケーラブルなドキュメント生成パイプラインを作成できます。

レポートジェネレーター、ドキュメントプレビュアー、または動的テンプレートシステムを構築しているかどうかに関わらず、IronPDFの実装にパターンマッチングを追加してみてください。 鮮明さ、制御性、および保守性の向上をすぐに実感できます。

自分でIronPDFを試してみたいですか?

無料試用版をダウンロードして、ライセンスを購入する前にIronPDFの強力な機能を自分で試してみてください。

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

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。