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

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

C#'ta PDF dosyalarıyla çalışmak, genellikle farklı belge türlerini, eylemleri veya veri kaynaklarını ele almayı içerir. Geleneksel olarak, geliştiriciler çeşitli giriş değerlerini ve türlerini veya çıktı kararlarını yönetmek için uzun if-else zincirlerine veya birbirine geçmiş switch ifadelerine güvenebilirlerdi. Ancak C#'ın switch desen eşleştirmesi gibi modern özellikleri sayesinde kodunuz çok daha nazik, okunabilir ve sürdürülebilir hale gelebilir.

Güçlü bir PDF kütüphanesi olan IronPDF ile birleştirildiğinde, switch desen eşleştirme, belge işleme için daha akıllı, daha temiz mantık oluşturmanızı sağlar. Bu makalede, C#'ın ileri desen eşleştirme özelliklerini — tür desenleri, özellik desenleri ve ilişkisel desenler gibi — IronPDF ile birlikte PDF oluşturma iş akışlarınızı nasıl düzene sokacağınızı keşfedeceğiz.

What is Switch Pattern Matching in C#?

Switch desen eşleştirme, C# 7'de tanıtılan ve sonraki sürümlerde sürekli iyileştirilen bir özelliktir. Sadece sabit değerleri eşleştiren geleneksel switch ifadelerinin aksine, desen eşleştirme, türleri, özellikleri ve koşulları tek bir ifade içinde değerlendirmenize olanak tanır. Aşağıdaki örnek, bu özelliğin nasıl çalıştığını göstermektedir.

Örnek Söz 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, tür desenlerini, ilişkisel operatörleri ve bir boş sabit desenini kullanarak birden fazla durumu özlü bir şekilde ele alır. Bu teknik, daha öz sözdizimi ile kodun okunabilirliğini önemli ölçüde artırır ve daha karmaşık mantığı destekler.

Switch Desen Eşleştirme'yi IronPDF ile Neden Birleştirmelisiniz?

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

IronPDF, HTML, resimler veya ham metinden PDF'ler oluşturmak ve manipüle etmek için güçlü bir .NET bileşenidir. Birçok gerçek dünya kullanım durumu, farklı giriş desenlerinin işlenmesini içerir: bazı belgeler URL'lerden kaynaklanabilir, diğerleri HTML dizgilerinden ve başka belgeler dosya yüklemelerinden.

Karmaşık koşullar altında ifadeleri test etmenin yerine, switch desen eşleştirme desen tabanlı mantığı verimli bir şekilde desteklemenize olanak tanır. Uygulamanızın farklı nesne türlerine, belirtilen sabitlere veya hatta Boole ifadelerine nasıl yanıt vereceğini tanımlamanıza izin verir, giriş ifadesini iş akışını yönlendirmek için kullanarak.

IronPDF'teki Yaygın Kullanım Durumları ve Desen Eşleştirme

Önceki örnekte temel sözdizimine baktık, ancak şimdi bunu uygulamada görelim. Aşağıdaki kod örnekleri, IronPDF ile C# desen eşleştirmenin birleşiminden yararlanan bazı gerçek dünya PDF görevleridir.

1. Tür ve Özellik Desenleriyle Birden Çok Giriş Formatını Ele Almak

Yönteminizin çeşitli giriş formatlarını kabul ettiğini varsayalım: HTML, bir Uri veya yerel bir .html dosyası. Tür desenlerini, özellik desenlerini ve null desenlerini kullanarak bu durumları zahmetsizce ayırt edebilirsiniz.

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), mantığı daha ifade edici ve sağlam hale getirir.

2. Pozisyonel ve Deklarasyon Desenleriyle PDF'leri Dinamik Olarak Biçimlendirmek

PdfRequest kaydında bir format dizgisi içeren bir kaydı kullandığınızı varsayalım. Pozisyonel desenler, deklarasyon desenler ve dizge sabitleri kullanarak PDF biçimlendirmesini özelleştirebilirsiniz.

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 kullanım, ifadenin kaydın içinde karşılık gelen özelliği, beklenen değerlere dayalı mantıksal desenler izleyerek eşleştirdiği şekilde düşünülmüştür.

Çıktı Boyutları

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

3. Rol Tabanlı PDF'ler ve Var ve Not Desenleri Kullanma

Kullanıcı rolleriyle başa çıkmak için var desenlerini ve not desenlerini kullanarak null veya beklenmedik durumların önüne geçin.

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 yapı, geçici değişken bildirimleri gibi var email'e dayalı güvenliği ve kodun okunabilirliğini artırır. Aşağıdaki resim, farklı giriş değerlere dayalı oluşturulan farklı PDF belgelerini göstermektedir.

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

4. Kullanıcı Verilerine Dayalı İlişkisel Desen Eşleştirme

Kullanıcı seviyelerine bağlı olarak farklı PDF'ler oluşturmanız mı gerekiyor? Girişin belirli bir aralığa girip girmediğini test etmek için iki ilişkisel desen kullanmayı deneyin.

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

İlişkisel operatörler ve boole ifadeleri, kodu özlü ve ifade edici kılar.

Çıktı

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

Projelerinizde Bu Deseni Uygulama İpuçları

C# Switch Desen Eşleşmesi (Geliştiriciler İçin Nasıl Çalışır): Şekil 5 - C# Desen Eşleme Kopya Çekme Tablosu

  • Temiz ve değişmez veri nesneleri için kayıt türleri kullanın.
  • Daha temiz mantık için switch ifadelerini if-else ağaçlarına tercih edin.
  • Önemsiz eşleşmeleri göz ardı etmek için olumsuz desenler ve görmezlikten gelme desenleri (_) kullanın.
  • Bilinmeyen girişleri yakalamak için varsayılan durumlar ekleyin.
  • Okunabilirlik için karmaşık durumları yardımcı yöntemlere bölün.

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 testi basitleştirir
  • Esneklik: Yeni giriş türleri eklerken mantığı kolayca genişletin
  • Daha İyi Sorun Ayrışımı: Girdilere/çıktılara sadece dönüşüm üzerine odaklanın

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

Switch desen eşleştirme, sadece sözdizimsel bir gelişme olmaktan öte, daha güvenli, daha ifade edici kod yazmak için güçlü bir paradigmadır. IronPDF'nin esnek render yetenekleriyle birleştiğinde, minimal kod ile daha akıllı ve ölçeklenebilir belge üretim hatları oluşturabilirsiniz.

Bir rapor oluşturucu, belge ön izleyici veya dinamik bir şablon sistemi kuruyorsanız, IronPDF uygulamanıza desen eşleştirme eklemeyi deneyin. Netlik, kontrol ve sürdürülebilirlikteki faydalarını hızlıca göreceksiniz.

IronPDF'yi Kendiniz Denemek İster Misiniz?

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

Sıkça Sorulan Sorular

C# switch desen eşleştirme, belge işleme süreçlerine nasıl uygulanabilir?

C#'da switch desen eşleştirme, karmaşık karar verme mantığını basitleştirmek için kullanılabilir. IronPDF gibi bir PDF kütüphanesi ile entegre edildiğinde, karar mantığını sadeleştirerek ve kod okunabilirliğini artırarak geliştiricilerin belge işleme görevlerini daha etkili bir şekilde yönetmelerine olanak tanır.

Switch örüntü eşlemenin geleneksel if-else ifadelerine göre avantajları nelerdir?

Switch desen eşleştirme, geleneksel if-else ifadelerine kıyasla birden fazla durumu ele almak için daha özlü ve okunabilir bir yol sağlar. C# kodunun sürdürülebilirliğini artırır, özellikle IronPDF kullanarak karmaşık belge işleme görevleriyle uğraşırken.

Switch desen eşleştirme, PDF belge otomasyonunu nasıl kolaylaştırır?

Switch desen eşleştirme, çeşitli belge eylemleri ve veri türlerini yönetmek için daha temiz bir mantık oluşturulmasına olanak tanıyarak PDF dökümanı otomasyonunu kolaylaştırır. IronPDF ile kullanıldığında, iş akışlarını otomatikleştirmeye ve veri çıkarma süreçlerini kolaylaştırmaya yardımcı olur.

Desen eşleştirme ile C#'da karmaşık belge iş akışları yönetilebilir mi?

Evet, switch desen eşleştirme, C#'ta karmaşık belge iş akışlarını yönetmek için çok uygundur. Farklı belge türlerini ve eylemlerini yönetmek için gereken mantığı basitleştirir, özellikle de IronPDF gibi güçlü kütüphanelerle birlikte kullanıldığında.

C# PDF işleme uygulamasında switch deseni eşleştirmeyi nasıl uygularsınız?

Bir C# PDF işleme uygulamasında, farklı belge türlerini veya işleme koşullarını yönetmek için desen eşleme söz dizimiyle switch ifadesini kullanarak anahtar deseni eşleme uygulanabilir. IronPDF, gerçek PDF manipülasyonu görevlerini yönetmek için kullanılabilir.

Geliştiriciler, C# dilinde switch desen eşleştirmesi kullanırken hangi zorluklarla karşılaşabilirler?

Geliştiriciler, daha karmaşık mantık gerektiren dinamik veya çalıştırma zamanı tabanlı desenlerle uğraşırken switch desen eşleştirme ile zorluklar yaşayabilir. Ancak, IronPDF gibi bir kütüphaneyle doğru şekilde kullanıldığında, kod verimliliğini önemli ölçüde artırabilir.

Switch deseni eşlemesi, kod bakımına nasıl katkı sağlar?

Switch desen eşleştirme, birden fazla durumu ele almak için net ve öz bir yol sunarak kodun bakımı kolaylaştırır. Bu, karmaşıklığı azaltır ve özellikle IronPDF kullanan büyük ölçekli uygulamalarda kodun anlaşılmasını ve değiştirilmesini daha kolay hale getirir.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ...

Daha Fazla Oku

Iron Destek Ekibi

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