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
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?

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
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
Bu kullanim, ifadenin kayittaki ilgili ozelligi nasıl eslestirdigini, beklenen degerlere dayali mantiksal desenleri takip ederek göstermektedir.
Cikti Boyutlari

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
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.

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
Iliskisel operatorler ve mantiksal ifadeler kodu oykunur ve ifadelidir.
Çıktı

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

- 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.




