.NET 幫助

C# 切換表示式 (適用於開發者的工作原理)

發佈 2023年12月12日
分享:

C# 不斷演進,融入提升語言表達力及增進整體開發者體驗的特性。 在這些功能中,switch 表達式特別值得注意,作為管理多個條件於單一表達式中的一個強大而簡潔的工具。

這篇全面的探討深入研究了C# switch expression的複雜性,提供了強調其語法、應用和優勢的範例。

從模式匹配和常量值到類型模式以及使用像 "switch" 和 "case" 這樣的關鍵字,我們深入探索這個語言特性的多樣元素。 討論涵蓋了各種模式,如常數模式、關係模式和類型模式,闡明了它們在 switch 表達式上下文中的作用。

此外,我們還研究在實際情境中插入 switch 表達式,展示其功效並提供其語法和實現的清晰解釋。 如需瞭解更多有關 switch 表達式的內部知識,請訪問此Microsoft 文檔:C# Switch 表達式.

在本文中,我們將探討 switch 表達式的範例,並測試它們的使用案例。IronPDF C# PDF 庫.

1. 切換運算式簡介

在 C# 8.0 中引入的 switch 表達式,代表了開發者處理條件邏輯方式的範式轉移。 傳統上,switch 語句是根據不同值進行分支的首選,但在使用關鍵字時,其在冗長性和靈活性方面有局限性。 Switch 表達式通過提供一種簡潔的語法來解決這些問題,允許編寫更具表達力和功能性的代碼。

在最簡單的形式中,switch 表達式類似於傳統的 switch 語句,但更為靈活。它會評估一個表達式,並根據該表達式的值選擇一個分支。 這種典範轉變使開發者能夠編寫更清晰、更易讀的代碼,並減少樣板代碼。

2. 語法和基本用法

C# switch 表達式的語法直觀,對於熟悉傳統 switch 陳述式的開發者來說很容易採用。 這是一個基本範例:

string result = input switch 
{ 
    "case1" => "Result for case 1",
    "case2" => "Result for case 2",
    _ => "Default result for case label" 
};
string result = input switch 
{ 
    "case1" => "Result for case 1",
    "case2" => "Result for case 2",
    _ => "Default result for case label" 
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

在此範例中,input 變數會被評估多個案例。 如果模式匹配其中一個指定的情況,則對應的結果將被賦給 result 變數。 底線(_)表示預設的可選情況,類似於傳統 switch 語句中的 default 關鍵字。

switch 表達式支持多種模式,包括常量模式、類型模式、關係模式等,使其成為處理複雜場景的多功能工具。 在處理列舉時,這特別有用,避免了重複的case語句的需要。

3. 進階模式和解構

switch 表達式的一個強項在於它能夠處理進階模式和解構。 這使開發者能夠以簡潔的方式從物件、陣列和模式中提取值。 請考慮以下的 switch 表達式範例:

var result = shape switch 
{ 
    (Circle c) => $"Circle with radius {c.Radius}",
    (Rectangle r) => $"Rectangle with dimensions {r.Length}x{r.Width}",
    _ => "Unknown shape" 
};
var result = shape switch 
{ 
    (Circle c) => $"Circle with radius {c.Radius}",
    (Rectangle r) => $"Rectangle with dimensions {r.Length}x{r.Width}",
    _ => "Unknown shape" 
};
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'var result = shape switch
'{ 
'	(Circle c) => $"Circle with radius {c.Radius}",
'	(Rectangle r) => $"Rectangle with dimensions {r.Length}x{r.Width}",
'	_ => "Unknown shape"
'};
VB   C#

在這種情況下,初始輸入值 shape 變數被拆解成其組成部分(圓形或矩形)並根據類型和值生成適當的消息。

4. 選擇運算式 vs. 選擇語句

雖然 switch 表達式與傳統的 switch 類語義模式相似,但它提供了幾個優勢。 switch 關鍵字表達式更為簡潔,消除了 break-case 聲明的需求,並減少了樣板代碼。 它還允許在表達式中直接賦值,讓程式碼更具表現力。

另一個顯著的特點是可以在 lambda 表達式中使用 switch 表達式,或者作為方法或屬性中表達式主體成員的一部分,有助於更具功能性的編程風格。

此外,switch 表达式鼓励使用常量模式匹配,提供一种更自然且强大的方式来处理不同的情况。

5. 性能考量與限制

雖然 switch 表達式帶來了許多好處,但了解性能方面的考量是至關重要的。 在某些情況下,switch 敘述可能更具效能,特別是在處理大量案例時。 開發人員應評估其應用程式的具體需求,並據此選擇適當的結構。

另一個需要注意的考量是,switch 表達式無法完全取代 switch 語句。 在某些情況下,具備貫穿行為的 switch 陳述式可能是較佳的選擇。

此外,switch 表達式僅適用於 C# 8.0 及更高版本,因此目標為較早版本的專案無法使用此功能。

IronPDF 的突出功能是其HTML 轉 PDF功能,保留所有佈局和樣式。 它允許從網頁內容生成 PDF,非常適合報告、發票和文檔。 HTML 文件、URL 和 HTML 字串可以輕鬆地轉換為 PDF。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
VB   C#

6. 使用IronPDF的實際應用

C# switch 表達式的應用在現實世界場景中特別具有影響力,尤其是在管理多個條件或列舉時,這在 IronPDF 的用例中得到了示範。 讓我們探索其在文件分類系統中的實用性。

using IronPdf;
using System;
class Program
{
    static void Main()
    {
        // Simulating HTML content for the PDF document
        string htmlContent = GetHtmlContent();
        // Creating IronPDF Document
        var pdfDocument = new ChromePdfRenderer();
        // Converting HTML to PDF
        var pdf = pdfDocument.RenderHtmlAsPdf(htmlContent);
        // Classifying the document based on the page count
        string classification = pdf switch
        {
            { PageCount: 1 } => "Single Page Document",
            { PageCount: >= 2 and <= 10 } => "Small Document",
            { PageCount: > 10 } => "Large Document",
            _ => "Unknown Classification"
        };
        // Save the PDF to a file
        pdf.SaveAs("document_output.pdf");
        // Displaying the classification result
        Console.WriteLine($"PDF created successfully. Document Classification: {classification}");
    }
    static string GetHtmlContent()
    {
        // In a real-world scenario, you would obtain the HTML content from an actual source.
        // For the sake of this example, we'll create a simple HTML string.
        string htmlContent = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>";
        return htmlContent;
    }
}
using IronPdf;
using System;
class Program
{
    static void Main()
    {
        // Simulating HTML content for the PDF document
        string htmlContent = GetHtmlContent();
        // Creating IronPDF Document
        var pdfDocument = new ChromePdfRenderer();
        // Converting HTML to PDF
        var pdf = pdfDocument.RenderHtmlAsPdf(htmlContent);
        // Classifying the document based on the page count
        string classification = pdf switch
        {
            { PageCount: 1 } => "Single Page Document",
            { PageCount: >= 2 and <= 10 } => "Small Document",
            { PageCount: > 10 } => "Large Document",
            _ => "Unknown Classification"
        };
        // Save the PDF to a file
        pdf.SaveAs("document_output.pdf");
        // Displaying the classification result
        Console.WriteLine($"PDF created successfully. Document Classification: {classification}");
    }
    static string GetHtmlContent()
    {
        // In a real-world scenario, you would obtain the HTML content from an actual source.
        // For the sake of this example, we'll create a simple HTML string.
        string htmlContent = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>";
        return htmlContent;
    }
}
Imports IronPdf
Imports System
Friend Class Program
	Shared Sub Main()
		' Simulating HTML content for the PDF document
		Dim htmlContent As String = GetHtmlContent()
		' Creating IronPDF Document
		Dim pdfDocument = New ChromePdfRenderer()
		' Converting HTML to PDF
		Dim pdf = pdfDocument.RenderHtmlAsPdf(htmlContent)
		' Classifying the document based on the page count
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'		string classification = pdf switch
'		{
'			{ PageCount: 1 } => "Single Page Document",
'			{ PageCount: >= 2 and <= 10 } => "Small Document",
'			{ PageCount: > 10 } => "Large Document",
'			_ => "Unknown Classification"
'		};
		' Save the PDF to a file
		pdf.SaveAs("document_output.pdf")
		' Displaying the classification result
		Console.WriteLine($"PDF created successfully. Document Classification: {classification}")
	End Sub
	Private Shared Function GetHtmlContent() As String
		' In a real-world scenario, you would obtain the HTML content from an actual source.
		' For the sake of this example, we'll create a simple HTML string.
		Dim htmlContent As String = "<html><body><h1>Hello IronPDF!</h1><p>This is a sample HTML content.</p></body></html>"
		Return htmlContent
	End Function
End Class
VB   C#

在此 C# 代碼片段中,IronPDF 的 ChromePdfRenderer 用於將模擬的 HTML 內容轉換為 PDF 文件。 生成的 PDF 隨後根據其頁數使用 switch 表達式進行分類。

switch 表達式使用遞迴模式將文件分類為不同類型,如「單頁文件」、「小型文件」或「大型文件」,具體取決於頁數範圍。 分類文件隨後被保存到名為"document_output.pdf"的檔案中,並通過主控台訊息傳達成功創建 PDF 及其分類結果。

這種簡潔且動態的方式展示了 switch 表達式在高效處理不同場景中的多樣性,提供了一種根據文件屬性進行分類的精簡方法。

6.1. 輸出控制台

C# Switch 表達式(如何為開發人員運作) 圖1

7. 結論

C# 8.0 引入的 C# switch 表達式作為語言中的關鍵演變,已成為開發人員精簡條件邏輯和增強代碼表達力的有力工具。

這次全面的探討深入研究了其語法、應用和優點,通過運用各種位置模式和關鍵字如「switch」和「case」的範例展示了其多功能性。從直觀的語法和基本使用到高級聲明模式和解構功能,switch 表達式在編寫簡潔、易讀的代碼中證明了其價值。

與傳統的 switch 陳述式進行比較時,可以看出其簡潔性以及對具表達力的構造的支持,包括 lambda 表達式和表達式主體成員。 能夠與外部庫無縫集成並促進流暢的 PDF 生成,進一步強調了 switch 表達式在推進現代 C# 開發實踐中的作用。

隨著 C# 不斷發展,switch 表達式堅持著語言對於賦予開發者高效且表達力強的工具以有效解決問題的承諾。

< 上一頁
C# 數學(開發者如何使用)
下一個 >
NUnit 或 xUnit .NET Core(開發人員如何使用)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >