Altbilgi içeriğine atla
.NET YARDıM

C# Switch Pattern Matching (Geliştiriciler için Nasıl Çalışır)

C#'de PDF dosyaları ile çalışmak, genellikle farklı türde belgeler, eylemler veya veri kaynaklarını işleme dahil eder. Geleneksel olarak, geliştiriciler toplu if-else zincirlerine veya iç içe switch ifadelerine güvenebilirler, çeşitli giriş değerlerini ve türlerini veya çıkışları yönetmek için. Ancak modern C# özellikleriyle birlikte switch desen eşleştirme, kodunuz çok daha zarif, okunabilir ve bakımı kolay hale gelebilir.

Güçlü bir PDF kütüphanesi gibi IronPDF ile bir araya getirildiğinde, switch desen eşleştirme, belge işleme için daha akıllı, daha temiz mantık yapıları oluşturmanıza olanak tanır. Bu makalede, IronPDF ile birlikte PDF oluşum süreçlerini düzenlemek için tip desenleri, özellik desenleri ve ilişkisel desenler gibi C#'da gelişmiş desen eşleştirme özelliklerinin nasıl kullanılacağını keşfedeceğiz.

C#'da Switch Desen Eşleştirme Nedir?

Switch desen eslestirme, C# 7'de tanitilan ve sonraki surumlerde surekli iyilestirilen bir özelliktir. Yalnizca sabit degerlerle esleme yapan geleneksel switch ifadelerinden farkli olarak, desen eslestirme tipleri, özellikleri ve kosullari tek ifadede degerlendirmenizi saglar. Bu ozelligin nasıl calistigini gösteren asagidaki ornegi inceleyin.

Örnek Soz Dizimi

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

Bu kod, tip desenleri, iliskisel operatorler ve bir null sabit deseni kullanarak birden fazla durumu oz ve ozenli sekilde yonetir. Bu teknik, daha oz ve aciklayici soz dizimiyle kod okunabilirligini kayda değer sekilde geliştirir ve daha karmasik mantiklara olanak tanir.

Neden Switch Desen Eslestirmeyi IronPDF ile Birlestirmeli?

C# Switch Desen Eşleştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 1 - IronPDF ana sayfa

IronPDF, HTML, gorsel veya ham metinlerden PDF ureten ve isleyen guclu bir .NET bilesenidir. Çok sayida gerçek dunya kullanim ornegi farkli giris desenlerini işlemekten ibarettir: bazilari URL'lerden cikabilir, digerleri HTML stringlerinden ve digerleri dosya yuklemelerinden.

Anahtar kelime kosullariyla ifadeleri test etmek yerine, switch desen eslestirme desene dayali mantigi etkili sekilde destekleme sansi tanir. Boylece uygulamanizin farkli nesne turlerine, belirtilenin sabitlerine ya da hatta mantiksal ifade eslestirerek yanitlarini tanimlayabilirsiniz - giriş ifadesinin kendisini akisi yonlendirmek icin kullanarak.

IronPDF ile Desen Eslestirme Onerileri

Onceki örnekten soz diziminin nasıl gorundugunu gorduk, simdi ise aktif olarak nasıl kullanildigini inceleyelim. Asagidaki kod örnekleri IronPDF ile C# desen eslestirme kombinasyonundan kazanc saglayan gerçek dunya PDF gorevlerinden bazilaridir.

1. Coklu Girdi Formatlarının Tip ve Özellik Desenleri ile Ele Alinmasi

Diyelim ki metodunuz HTML, bir Uri veya yerel bir .html dosyasi gibi çeşitli giris formatlarini kabul ediyor. Tip desenleri, özellik desenleri ve null desenleri kullanarak bu durumlari zahmetsizce ayirabilirsiniz.

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

Burada, özellik deseni (FileInfo { Extension: ".html" }) ve null sabit deseni (case null) mantigi daha ifade gucune sahip ve saglam hale getirir.

2. Positional ve Bildirim Desenleriyle Tüm PDFleri Dinamik Formatlama

Bir format stringi iceren bir PdfRequest kaydini kullandiginizi varsayin. Positional desenleri, bildirim desenleri ve string sabitleri uygulayarak PDF formatini ozellestirebilirsiniz.

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

Bu kullanim, ifadenin kayittaki ilgili ozelligi nasıl eslestirdigini, beklenen degerlere dayali mantiksal desenleri takip ederek göstermektedir.

Cikti Boyutlari

C# Switch Desen Eşleştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 2 - PDF çıktılarında boyut farkı

3. Var ve Not Desenleri Kullanarak Rol-Tabanli PDFler

Var desenlerini ve not desenlerini kullanmak, kullanıcı rollerini ele alirken null veya beklenmeyen durumlari onler.

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

Bu yapi, email gibi gecici degisken bildirimleri kullanarak guvenligi arttirir ve kod okunabilirligini geliştirir. Asagidaki resim, farkli giris degerlerine bagli olarak oluşturulan farkli PDF belgelerini göstermektedir.

C# Switch Desen Eşleştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 3 - Role dayalı çıktı

4. Kullanıcı Verisine Dayali Iliskisel Desen Eslestirme

Farkli kullanıcı seviyelerine bagli olarak farkli PDFler oluşturmaniz mi gerekiyor? Girdinin belirli bir araliga dusup dusmedigini test etmek icin iki iliskisel deseni kullanmaya calisin.

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

Iliskisel operatorler ve mantiksal ifadeler kodu oykunur ve ifadelidir.

Çıktı

C# Switch Desen Eşleştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 4 - Puan dayalı çıktı

Projelerinizde Bu Deseni Uygulamak İçin İpuçları

C# Switch Desen Eşleştirme (Geliştiriciler İçin Nasıl Çalışır): Şekil 5 - C# Desen Eşleştirme Hızlı Başvuru Kılavuzu

  • Kayıt türlerini kullanın temiz ve değişmez veri nesneleri için.
  • Switch ifadelerini tercih edin, daha temiz bir mantık için if-else ağaçları yerine.
  • İlgisiz eşleşmeleri yok saymak için değil desenleri ve atlatma desenlerini (_) kullanın.
  • Varsayılan durumlar ekleyin bilinmeyen girdileri erken yakalamak için.
  • Okunabilirlik için karmaşık durumları ayırın yardımcı yöntemlere.

Gerçek Dünya Faydaları

  • Daha Temiz Kod: Artık derinlemesine iç içe geçmiş if-else veya switch-case blokları yok
  • Daha Kolay Test: İzole desen durumları birim testini basitleştirir
  • Esneklik: Yeni girdi türleri eklerken mantığı kolayca genişletin
  • Karmaşıklıkların Daha İyi Ayrılması: Mantığı yalnızca girdi/çıktı dönüşümüne odaklayın

Sonuç: PDF Mantığınızı Modernize Edin

Switch desen eşleştirme sadece bir sözdizimsel iyileştirme değil, daha güvenli ve daha ifadeli kod yazmak için güçlü bir paradigmadır. IronPDF'nin esnek render yetenekleriyle birleştirilerek, minimal kodla daha akıllı ve daha ölçeklenebilir belge oluşturma boru hatları oluşturabilirsiniz.

İster bir rapor oluşturucu, belge önizleyici veya dinamik şablon sistemi inşa ediyor olun, IronPDF uygulamanıza desen eşleştirmeyi eklemeyi deneyin. Açıklık, kontrol ve sürdürülebilirlik açısından faydalarını hızlıca göreceksiniz.

IronPDF'yi Denemek İster Misiniz?

Ücretsiz deneme sürümünü indirin ve lisans satın almadan önce IronPDF'nin güçlü özelliklerini kendiniz deneyin.

Sıkça Sorulan Sorular

C# switch kalip matching doküman işleme için nasıl uygulanabilir?

C#'ta switch kalip matching, karmasik karar verme mantigini basitleştirmek için kullanilabilir. IronPDF gibi bir PDF kütüphanesi ile entegre oldugunda, geliştiricilere doküman işleme gorevlerini daha etkili bir şekilde yönetme olanağı saglar, karar mantigini daha duzgun hale getirir ve kodun okunabilirligini iyilestirir.

Switch kalip matching'in geleneksel if-else ifadelerine gore ne gibi avantajlari vardir?

Switch kalip matching, geleneksel if-else ifadelerine gore coklu koşulları yönetmek için daha kisa ve kolay okunan bir yol sunar. C# kodunun surdurulebilirligini artirir, özellikle IronPDF kullanarak karmaşık doküman işleme görevlerinde.

Switch kalip matching, PDF doküman otomasyonunu nasıl kolaylastirir?

Switch kalip matching, genis doküman işlemleri ve veri tiplerini yönetmek için daha temiz mantik oluşturmaya olanak tanir. IronPDF ile kullanildiginda, is akisi otomasyonunu ve veri çıkarma süreçlerini basitlestirir.

Switch kalip matching, C#'ta karmaşık doküman is akışlarını işleyebilir mi?

Evet, switch kalip matching, C#'taki karmaşık doküman is akışlarını işlemek için çok uygundur. Farklı doküman türleri ve eylemlerini yönetmek için gerekli mantigi basitleştirir, özellikle IronPDF gibi saglam kütüphanelerle birlikte kullanildiginda.

C# PDF işleme uygulamasinda switch kalip matching nasıl uygulanir?

C# PDF işleme uygulamasinda, switch ifadesi ile farkli doküman türleri veya işleme koşulları yönetmek için kalip matching sintaksı kullanılarak switch kalip matching uygulayabilirsiniz. IronPDF, gerçek PDF manipulasyon gorevlerini işlemek için kullanilir.

C#'ta switch kalip matching kullanirken geliştiriciler hangi zorluklarla karsilasabilir?

Geliştiriciler, daha karmaşık mantik gerektiren dinamik veya çalışma zamani tabanli kalıplarla switch kalip matching kullanirken zorluklarla karsilasabilir. Ancak, doğru bir şekilde IronPDF gibi bir kütüphane ile kullanildiginda, kod verimliligini önemli ölçüde artırabilir.

Switch kalip matching kodun surdurulebilirligine nasıl katki saglar?

Switch kalip matching, coklu koşulları işlemek için net, kisa bir yol sunarak kodun surdurulebilirligine katkı saglar. Bu, karmasıklığı azaltir ve kodun anlaşılmasını ve değiştirilmesini kolaylaştırır, özellikle IronPDF kullanarak büyük caplı uygulamalarda.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Chief Technology Officer

Jacob Mellor, Iron Software'in Teknoloji Müdürü ve C# PDF teknolojisinin öncüsü olan vizyoner bir mühendis. Iron Software’in temel kod tabanının ilk geliştiricisi olarak, şirketin ürün mimarisini kuruluşundan bu yana şekillendirdi ve CEO Cameron Rimington ile birlikte NASA, Tesla ve ...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara