Zum Fußzeileninhalt springen
.NET HILFE

C# Switch-Fallmuster (Wie es für Entwickler funktioniert)

Das Arbeiten mit PDF-Dateien in C# umfasst häufig das Handling verschiedener Dokumenttypen, Aktionen oder Datenquellen. Traditionell verlassen sich Entwickler möglicherweise auf lange Wenn-Sonst-Ketten oder verschachtelte Switch-Anweisungen, um verschiedene Eingabewerte und Typen oder Ausgabentscheidungen zu verwalten. Aber mit modernen C#-Funktionen wie Switch-Musterabgleich kann Ihr Code weitaus eleganter, lesbarer und wartungsfreundlicher werden.

In Kombination mit einer leistungsstarken PDF-Bibliothek wie IronPDF ermöglicht Ihnen der Switch-Musterabgleich, intelligentere, sauberere Logik für die Dokumentverarbeitung zu erstellen. In diesem Artikel werden wir untersuchen, wie Sie die erweiterten Musterabgleichs-Funktionen von C#—wie Typenmuster, Eigenschaftsmuster und relationale Muster—neben IronPDF nutzen können, um Ihre PDF-Erstellungs-Workflows zu optimieren.

Was ist Switch Pattern Matching in C#?

Der Switch-Musterabgleich ist eine Funktion, die in C# 7 eingeführt wurde und in späteren Versionen kontinuierlich verbessert wurde. Im Gegensatz zu herkömmlichen Switch-Anweisungen, die nur konstante Werte abgleichen, ermöglicht Ihnen der Musterabgleich die Auswertung von Typen, Eigenschaften und Bedingungen innerhalb eines einzigen Ausdrucks. Das folgende Beispiel zeigt, wie diese Funktion funktioniert.

Beispielsyntax

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;
}
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;
}
Select Case input
'INSTANT VB TODO TASK: The following 'case' pattern variable is not converted by Instant VB:
'ORIGINAL LINE: case int i when i > 0:
	Case Integer i [when] i > 0
		Console.WriteLine("Positive integer")
'INSTANT VB TODO TASK: The following 'case' pattern variable is not converted by Instant VB:
'ORIGINAL LINE: case string s:
	Case String s
		Console.WriteLine($"It's a string: {s}")
	Case Else
		Console.WriteLine("Unknown type")
End Select
$vbLabelText   $csharpLabel

Dieser Code verwendet Typenmuster, relationale Operatoren und ein Nullkonstantenmuster, um mehrere Fälle prägnant zu bearbeiten. Diese Technik verbessert die Lesbarkeit des Codes erheblich mit prägnanterer Syntax und unterstützt komplexere Logik.

Warum Switch Pattern Matching mit IronPDF kombinieren?

C# Switch-Musterabgleich (wie es für Entwickler funktioniert): Abbildung 1 – IronPDF-Startseite

IronPDF ist eine leistungsstarke .NET-Komponente zur Erstellung und Bearbeitung von PDFs aus HTML, Bildern oder Rohtext. Viele reale Anwendungsfälle beinhalten die Verarbeitung unterschiedlicher Eingabemuster: einige Dokumente können von URLs stammen, andere von HTML-Strings und wieder andere von Datei-Uploads.

Anstatt Ausdrücke mit umständlichen Wenn-Bedingungen zu testen, ermöglicht Ihnen der Switch-Musterabgleich, musterbasierte Logik effizient zu unterstützen. Es ermöglicht Ihnen, festzulegen, wie Ihre Anwendung auf verschiedene Objekttypen, angegebene Konstanten oder sogar boolesche Ausdrücke reagiert—wobei der Eingabeausdruck selbst den Workflow steuert.

Gängige Anwendungsfälle in IronPDF mit Pattern Matching

Im vorherigen Beispiel haben wir uns angesehen, wie die Grundsyntax aussieht, aber jetzt sehen wir sie in Aktion. Die folgenden Codebeispiele sind einige reale PDF-Aufgaben, die von der Kombination von IronPDF mit C#-Musterabgleich profitieren.

1. mehrere Eingabeformate mit Typ- und Eigenschaftsmustern handhaben

Angenommen, Ihre Methode akzeptiert verschiedene Eingabeformate: HTML, eine Uri oder eine lokale .html-Datei. Mit Typenmustern, Eigenschaftsmustern und Nullmustern können Sie diese Fälle mühelos unterscheiden.

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");
    }
}
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");
    }
}
Imports System
Imports System.IO
Imports IronPdf
Friend Class Program
	Shared Sub Main()
		Dim input As Object = New Uri("https://example.com") ' Try changing this to: "<html><body>Hello</body></html>" or new FileInfo("sample.html")
		Dim renderer = New ChromePdfRenderer()
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'		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")
	End Sub
End Class
$vbLabelText   $csharpLabel

Hier machen das Eigenschaftsmuster (FileInfo { Extension: ".html" }) und das Nullkonstantenmuster (case null) die Logik ausdrucksstärker und robuster.

2. dynamisches Formatieren von PDFs mit Positions- und Deklarationsmustern

Angenommen, Sie verwenden einen PdfRequest-Datensatz, der eine Formatzeichenfolge enthält. Sie können Positionsmuster, Deklarationsmuster und Zeichenkettenkonstanten anwenden, um das PDF-Format anzupassen.

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");
    }
}
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");
    }
}
Imports System
Imports IronPdf
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record PdfRequest(string Title, string Content, string Format)
Friend Class Program
	Shared Sub Main()
		Dim request As New PdfRequest("My Report", "<h1>Monthly Report</h1><p>Generated by IronPDF.</p>", "A4")
		Dim renderer = New ChromePdfRenderer()
		' Use fully qualified enum to avoid IronWord conflict
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'		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
'			}
'		};
		Dim pdf = renderer.RenderHtmlAsPdf(request.Content)
		pdf.SaveAs("example-formatted.pdf")
		Console.WriteLine("PDF created: example-formatted.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Diese Nutzung zeigt, wie der Ausdruck die entsprechende Eigenschaft innerhalb des Datensatzes abgleicht, indem logische Muster basierend auf erwarteten Werten befolgt werden.

Ausgangsgrößen

C# Switch-Musterabgleich (wie es für Entwickler funktioniert): Abbildung 2 – Größenunterschiede bei PDF-Ausgaben

3. rollenbasierte PDFs mit Var und Not Patterns

Verwenden Sie Var-Muster und Not-Muster, um Benutzerrollen zu behandeln und gleichzeitig Null- oder unerwartete Zustände zu vermeiden.

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");
    }
}
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");
    }
}
Imports System
Imports IronPdf
Public MustOverride ReadOnly Property UserRole() As record
public record Admin(String Email) : UserRole
public record Viewer(String Email) : UserRole
public record Guest() : UserRole
Dim Program As class
If True Then
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	static void Main()
'	{
'		UserRole currentUser = New Admin("admin@example.com"); ' Try changing to Viewer or Guest
''INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
''		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");
'	}
End If
$vbLabelText   $csharpLabel

Diese Struktur verbessert die Sicherheit und Lesbarkeit des Codes, während temporäre Variablendeklarationen wie var email genutzt werden. Das folgende Bild zeigt die verschiedenen PDF-Dokumente, die basierend auf unterschiedlichen Eingabewerten erstellt wurden.

C# Switch-Musterabgleich (wie es für Entwickler funktioniert): Abbildung 3 – Rollenbasierte Ausgabe

4. relationales Pattern Matching auf der Grundlage von Benutzerdaten

Müssen Sie unterschiedliche PDFs je nach Benutzerlevel generieren? Versuchen Sie, zwei relationale Muster zu verwenden, um zu testen, ob die Eingabe in einen bestimmten Bereich fällt.

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");
    }
}
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");
    }
}
Imports System
Imports IronPdf
Friend Class Program
	Shared Sub Main()
		Dim userScore As Integer = 85 ' Try other values: 45, 70, 101
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'		string message = userScore switch
'		{
'			< 60 => "Needs Improvement",
'			>= 60 and < 80 => "Satisfactory",
'			>= 80 and <= 100 => "Excellent",
'			_ => "Invalid score"
'		};
		Dim html = $"<h1>Score Report</h1><p>Score: {userScore}</p><p>Result: {message}</p>"
		Dim pdf = (New ChromePdfRenderer()).RenderHtmlAsPdf(html)
		pdf.SaveAs("example-score.pdf")
		Console.WriteLine("PDF created: example-score.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Die relationalen Operatoren und booleschen Ausdrücke halten den Code prägnant und ausdrucksstark.

Ausgabe

C# Switch-Musterabgleich (wie es für Entwickler funktioniert): Abbildung 4 – Score-basierte Ausgaben

Tipps für die Implementierung dieses Musters in Ihren Projekten

C# Switch-Musterabgleich (wie es für Entwickler funktioniert): Abbildung 5 – C#-Musterabgleich-Cheat-Sheet

  • Verwenden Sie Aufzeichnungstypen für saubere und unveränderliche Datensätze.
  • Bevorzugen Sie Switch-Ausdrücke gegenüber Wenn-Sonst-Pyramiden für saubere Logik.
  • Verwenden Sie Not-Muster und Verwerfungs-Muster (_) um irrelevante Übereinstimmungen zu ignorieren.
  • Fügen Sie Standardfälle hinzu um unbekannte Eingaben frühzeitig abzufangen.
  • Komplexe Fälle ausgliedern in Hilfsmethoden für bessere Lesbarkeit.

Nutzen in der realen Welt

  • Sauberer Code: Keine tief verschachtelten Wenn-Sonst- oder Switch-Case-Blöcke mehr
  • Einfacheres Testen: Isolierte Musterfälle vereinfachen das Unit-Testing
  • Flexibilität: Logik einfach erweitern, wenn neue Eingabetypen hinzugefügt werden
  • Bessere Trennung der Belange: Logik nur auf Eingabe-/Ausgabe-Transformation fokussieren

Abschluss: Modernisieren Sie Ihre PDF-Logik

Der Switch-Musterabgleich ist mehr als nur eine syntaktische Verbesserung, er ist ein leistungsfähiges Paradigma zur Erstellung sichererer, ausdrucksstärkerer Codes. In Kombination mit den flexiblen Rendering-Funktionen von IronPDF können Sie intelligentere und skalierbarere Dokumenterstellungspipelines mit minimalem Code erstellen.

Egal ob Sie einen Berichtsgenerator, eine Dokumentenvorschau oder ein dynamisches Vorlagensystem erstellen, versuchen Sie, Musterabgleich in Ihre IronPDF-Implementierung einzubauen. Sie werden schnell die Vorteile in Klarheit, Kontrolle und Wartbarkeit sehen.

Wollen Sie IronPDF selbst ausprobieren?

Laden Sie die kostenlose Testversion herunter, um die leistungsstarken Funktionen von IronPDF selbst auszuprobieren, bevor Sie eine Lizenz erwerben.

Häufig gestellte Fragen

Wie kann C# Switch-Musterabgleich in der Dokumentenverarbeitung angewendet werden?

Switch-Musterabgleich in C# kann verwendet werden, um komplexe Entscheidungslogik zu vereinfachen. Bei der Integration mit einer PDF-Bibliothek wie IronPDF ermöglicht es Entwicklern, Dokumentenverarbeitungsaufgaben effektiver zu verwalten, indem es die Entscheidungslogik rationalisiert und die Lesbarkeit des Codes verbessert.

Welche Vorteile bietet der Switch-Musterabgleich gegenüber traditionellen if-else-Anweisungen?

Der Switch-Musterabgleich bietet eine prägnantere und lesbarere Möglichkeit, mehrere Bedingungen zu handhaben, verglichen mit traditionellen if-else-Anweisungen. Er verbessert die Wartbarkeit von C#-Code, insbesondere bei der Behandlung komplexer Dokumentenverarbeitungsaufgaben mit IronPDF.

Wie erleichtert der Switch-Musterabgleich die Automatisierung von PDF-Dokumenten?

Der Switch-Musterabgleich erleichtert die Automatisierung von PDF-Dokumenten, indem er Entwicklern ermöglicht, sauberere Logik zum Verwalten verschiedener Dokumentaktionen und Datentypen zu erstellen. In Verbindung mit IronPDF hilft er, Workflows zu automatisieren und Datenextraktionsprozesse zu rationalisieren.

Kann der Switch-Musterabgleich komplexe Dokumenten-Workflows in C# handhaben?

Ja, der Switch-Musterabgleich eignet sich gut zur Handhabung komplexer Dokumenten-Workflows in C#. Er vereinfacht die benötigte Logik zum Verwalten unterschiedlicher Dokumententypen und -aktionen, insbesondere in Kombination mit robusten Bibliotheken wie IronPDF.

Wie implementiert man den Switch-Musterabgleich in einer C#-PDF-Verarbeitungsanwendung?

In einer C#-PDF-Verarbeitungsanwendung können Sie den Switch-Musterabgleich implementieren, indem Sie die switch-Anweisung mit Musterabgleich-Syntax verwenden, um verschiedene Dokumententypen oder Verarbeitungsbedingungen zu verwalten. IronPDF kann verwendet werden, um die eigentlichen PDF-Bearbeitungsaufgaben zu erledigen.

Vor welchen Herausforderungen könnten Entwickler beim Einsatz des Switch-Musterabgleichs in C# stehen?

Entwickler könnten bei der Arbeit mit dynamischen oder zur Laufzeit basierenden Mustern, die komplexere Logik erfordern, Herausforderungen beim Switch-Musterabgleich begegnen. Bei korrekter Verwendung mit einer Bibliothek wie IronPDF kann er jedoch die Codeeffizienz erheblich verbessern.

Wie trägt der Switch-Musterabgleich zur Wartbarkeit des Codes bei?

Der Switch-Musterabgleich trägt zur Wartbarkeit des Codes bei, indem er eine klare und prägnante Möglichkeit bietet, mehrere Bedingungen zu behandeln. Dies verringert die Komplexität und macht den Code leichter verständlich und veränderbar, insbesondere in groß angelegten Anwendungen mit IronPDF.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen