跳至页脚内容
.NET 帮助

C# 选择语句(开发者如何使用)

C#中的switch语句提供了一个更精简和可读的替代多个if-else块的方法。 当您有一个可以取多个不同值的变量,并且需要根据该值执行不同的代码时,这是有益的。 switch语句评估一个表达式并根据匹配的值执行代码,使其成为代码中决策的重要组成部分。

虽然if-else结构对于简单条件或检查很有用,但switch case语句在处理更复杂的条件检查时表现出色,尤其是那些基于单个变量或模式匹配表达式的检查。 与if语句相比,它们提供了更简洁和更易理解的语法,这对于编写和维护代码至关重要。

Switch语句的基础

什么是Switch语句?

C#中的switch语句是一种用于选择执行多个代码路径之一的控制结构。 选择是基于值或表达式的。 对于处理可以有多个不同值的变量来说,使用多个if-else条件的高效替代方案。

语法

switch语句的基本语法如下:

// Switch statement
switch (variable)
{
    case value1:
        // Code to execute if variable equals value1
        break;
    case value2:
        // Code to execute if variable equals value2
        break;
    // More cases as needed
    default:
        // Code to execute if variable doesn't match any case
        break;
}
// Switch statement
switch (variable)
{
    case value1:
        // Code to execute if variable equals value1
        break;
    case value2:
        // Code to execute if variable equals value2
        break;
    // More cases as needed
    default:
        // Code to execute if variable doesn't match any case
        break;
}
' Switch statement
Select Case variable
	Case value1
		' Code to execute if variable equals value1
	Case value2
		' Code to execute if variable equals value2
	' More cases as needed
	Case Else
		' Code to execute if variable doesn't match any case
End Select
$vbLabelText   $csharpLabel
  • switch (variable):这指定要评估的变量或表达式。
  • case value1:这些是您检查变量时的不同值或条件。
  • break:此关键词用于在执行匹配的case后退出switch块。
  • default语句:如果没有指定的case与变量匹配,则执行此块。

了解Break语句

switch中的break语句至关重要。 它防止了"贯穿"行为,即即使条件已经满足,也会继续到下一个case。 每个case块通常以break语句结束,以确保只执行匹配case下的代码。

比较Switch语句和If-Else语句

if-else语句的结构涉及检查条件并在条件为真时执行代码块,而switch语句则是将单个变量或表达式与多个可能值进行比较。 当您有许多条件或case模式需要检查时,switch语句更简洁且易于阅读。

示例:使用Switch语句

int number = 3;
switch (number)
{
    case 1:
        Console.WriteLine("One");
        break;
    case 2:
        Console.WriteLine("Two");
        break;
    case 3:
        Console.WriteLine("Three");
        break;
    default:
        Console.WriteLine("Other Number"); // Print to console
        break;
}
int number = 3;
switch (number)
{
    case 1:
        Console.WriteLine("One");
        break;
    case 2:
        Console.WriteLine("Two");
        break;
    case 3:
        Console.WriteLine("Three");
        break;
    default:
        Console.WriteLine("Other Number"); // Print to console
        break;
}
Dim number As Integer = 3
Select Case number
	Case 1
		Console.WriteLine("One")
	Case 2
		Console.WriteLine("Two")
	Case 3
		Console.WriteLine("Three")
	Case Else
		Console.WriteLine("Other Number") ' Print to console
End Select
$vbLabelText   $csharpLabel

在此示例中,程序将打印输出"Three",因为数字匹配case 3。

Default Case的角色

理解switch块中的default

在switch语句中,default case起着至关重要的作用。 它作为一个所有情况的备选,会在没有指定的case标签匹配switch表达式的值时执行。 虽然它是可选的,但包括default case是一个良好实践,以处理意外或未知的值。

如何以及何时使用default语句

default case用于当您希望执行一个代码块时,如果没有特定case匹配。 它确保了switch语句无论输入如何都有定义的行为。 default case使用default关键词声明,后跟冒号。

default:
    // Code to execute if no case matches
    break;
default:
    // Code to execute if no case matches
    break;
Case Else
	' Code to execute if no case matches
	break
$vbLabelText   $csharpLabel

default case可以放置在switch块中的任何位置,但通常为了可读性放在最后。

示例:带有default case的Switch语句

考虑一个您需要评估一周中某一天的场景:

int day = 5;
string dayName;
switch (day)
{
    case 1:
        dayName = "Monday";
        break;
    case 2:
        dayName = "Tuesday";
        break;
    case 3:
        dayName = "Wednesday";
        break;
    case 4:
        dayName = "Thursday";
        break;
    case 5:
        dayName = "Friday";
        break;
    case 6:
        dayName = "Saturday";
        break;
    case 7:
        dayName = "Sunday";
        break;
    default:
        dayName = "Invalid day";
        break;
}
Console.WriteLine(dayName);
int day = 5;
string dayName;
switch (day)
{
    case 1:
        dayName = "Monday";
        break;
    case 2:
        dayName = "Tuesday";
        break;
    case 3:
        dayName = "Wednesday";
        break;
    case 4:
        dayName = "Thursday";
        break;
    case 5:
        dayName = "Friday";
        break;
    case 6:
        dayName = "Saturday";
        break;
    case 7:
        dayName = "Sunday";
        break;
    default:
        dayName = "Invalid day";
        break;
}
Console.WriteLine(dayName);
Dim day As Integer = 5
Dim dayName As String
Select Case day
	Case 1
		dayName = "Monday"
	Case 2
		dayName = "Tuesday"
	Case 3
		dayName = "Wednesday"
	Case 4
		dayName = "Thursday"
	Case 5
		dayName = "Friday"
	Case 6
		dayName = "Saturday"
	Case 7
		dayName = "Sunday"
	Case Else
		dayName = "Invalid day"
End Select
Console.WriteLine(dayName)
$vbLabelText   $csharpLabel

在此示例中,如果day的值不是1到7中的任何一个,则执行default case,将dayName设置为"无效的日子"。

default case的最佳实践

  • 始终包含一个Default:即使您认为已经涵盖所有可能的情况,也请包括一个default case来处理意外值。
  • 有意义的动作:使用default case来执行有意义的行动,比如记录错误、设置默认值或通知用户未知值。

高级Switch特性

引入C#中的Switch表达式

随着C#的发展,switch表达式被引入作为一种更简洁和更具表现力的方式来处理多个条件分支。 与传统的switch语句不同,switch表达式返回一个值,并且更为精简,使其在现代C#编程中成为一种强大的工具。

语法 of Switch Expressions

C#中switch表达式的语法是switch case语句的一种更紧凑的形式。 这是一个基本结构:

var result = variable switch
{
    value1 => result1,
    value2 => result2,
    _ => defaultResult
};
var result = variable switch
{
    value1 => result1,
    value2 => result2,
    _ => defaultResult
};
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'var result = variable switch
'{
'	value1 => result1,
'	value2 => result2,
'	_ => defaultResult
'};
$vbLabelText   $csharpLabel

下划线(_)符号在switch表达式中表示default case,与传统switch语句中的default块功能类似。

示例:使用Switch表达式

考虑一个需要对温度读数进行分类的场景:

int temperature = 25;
string weatherDescription = temperature switch
{
    <= 0 => "Freezing",
    < 20 => "Cold",
    < 30 => "Mild",
    _ => "Hot"
};
Console.WriteLine(weatherDescription);
int temperature = 25;
string weatherDescription = temperature switch
{
    <= 0 => "Freezing",
    < 20 => "Cold",
    < 30 => "Mild",
    _ => "Hot"
};
Console.WriteLine(weatherDescription);
Dim temperature As Integer = 25
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'string weatherDescription = temperature switch
'{
'	<= 0 => "Freezing",
'	< 20 => "Cold",
'	< 30 => "Mild",
'	_ => "Hot"
'};
Console.WriteLine(weatherDescription)
$vbLabelText   $csharpLabel

在此示例中,switch表达式简洁地对温度进行分类,默认case(_)覆盖了其他case未匹配的任何场景。

通过Switch表达式进行模式匹配

C#中的switch表达式允许进行模式匹配,使其更具多用性。 您可以匹配类型、值甚至是模式:

object obj = // some object;
string description = obj switch
{
    int i => $"Integer: {i}",
    string s => $"String: {s}",
    _ => "Unknown type"
};
object obj = // some object;
string description = obj switch
{
    int i => $"Integer: {i}",
    string s => $"String: {s}",
    _ => "Unknown type"
};
'INSTANT VB TODO TASK: The following 'switch expression' was not converted by Instant VB:
'object obj = string description = obj switch
'{
'	int i => $"Integer: {i}",
'	string s => $"String: {s}",
'	_ => "Unknown type"
'};
$vbLabelText   $csharpLabel

C# Switch语句与Switch表达式

  • C# Switch语句:传统上用于根据变量的值执行不同的代码块。 它要求每个case都有一个break语句。
  • Switch表达式:在C# 8.0中引入,这提供了一种更简洁的语法,通常在需要根据条件返回一个值时使用。

将Switch语句与IronPDF集成到C#中

C# Case Statement(开发人员如何使用):图1 - IronPDF

探索IronPDF功能是一个.NET PDF库,用于创建、编辑和处理PDF文档。 当与C# switch语句或表达式结合使用时,它成为处理各种特定条件下的PDF相关操作的强大工具。 这种集成对于需要基于PDF内容或元数据进行决策的任务特别有用。

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
$vbLabelText   $csharpLabel

示例:使用IronPDF和Switch语句进行条件水印

让我们考虑一个您有一份PDF文档,并希望根据页数应用不同水印的情景。 以下是如何使用IronPDF结合C# switch语句实现此目标的方法:

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        IronPdf.License.LicenseKey = "Your-License-Code";
        PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
        // Define different watermark HTML for each case
        string watermarkHtmlOnePage = "<div style='color:red;'>One Page Document</div>";
        string watermarkHtmlTwoPage = "<div style='color:blue;'>Two Page Document</div>";
        switch (pdf.PageCount)
        {
            case 1:
                // Apply watermark for one-page document
                pdf.ApplyWatermark(watermarkHtmlOnePage);
                break;
            case 2:
                // Apply watermark for two-page documents
                pdf.ApplyWatermark(watermarkHtmlTwoPage);
                break;
            default:
                // Apply a default watermark for other cases
                pdf.ApplyWatermark("<div style='color:green;'>Multiple Page Document</div>");
                break;
        }
        // Save the watermarked PDF
        pdf.SaveAs("watermarked.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        IronPdf.License.LicenseKey = "Your-License-Code";
        PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
        // Define different watermark HTML for each case
        string watermarkHtmlOnePage = "<div style='color:red;'>One Page Document</div>";
        string watermarkHtmlTwoPage = "<div style='color:blue;'>Two Page Document</div>";
        switch (pdf.PageCount)
        {
            case 1:
                // Apply watermark for one-page document
                pdf.ApplyWatermark(watermarkHtmlOnePage);
                break;
            case 2:
                // Apply watermark for two-page documents
                pdf.ApplyWatermark(watermarkHtmlTwoPage);
                break;
            default:
                // Apply a default watermark for other cases
                pdf.ApplyWatermark("<div style='color:green;'>Multiple Page Document</div>");
                break;
        }
        // Save the watermarked PDF
        pdf.SaveAs("watermarked.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		IronPdf.License.LicenseKey = "Your-License-Code"
		Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")
		' Define different watermark HTML for each case
		Dim watermarkHtmlOnePage As String = "<div style='color:red;'>One Page Document</div>"
		Dim watermarkHtmlTwoPage As String = "<div style='color:blue;'>Two Page Document</div>"
		Select Case pdf.PageCount
			Case 1
				' Apply watermark for one-page document
				pdf.ApplyWatermark(watermarkHtmlOnePage)
			Case 2
				' Apply watermark for two-page documents
				pdf.ApplyWatermark(watermarkHtmlTwoPage)
			Case Else
				' Apply a default watermark for other cases
				pdf.ApplyWatermark("<div style='color:green;'>Multiple Page Document</div>")
		End Select
		' Save the watermarked PDF
		pdf.SaveAs("watermarked.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

这是单页输出的PDF文件:

C# Case Statement(开发人员如何使用):图2 -输出

结论

在本教程中,我们探索了C#中的switch case语句,这是编程中决策的基本形式。 我们首先了解了其基本结构,并与传统的if-else语句进行了比较,突出了其在可读性和处理多个条件方面的简单性优势。

我们创建了简单的switch case,处理了具有default case的各种场景,并探索了switch表达式等高级功能。 真实世界的switch语句应用通过集成IronPDF进行动态PDF处理的示例得到展示,展示了switch语句如何作为程序员工具包中的有价值工具。

IronPDF提供免费试用以探索功能,让您能够探索其功能和特性。 为了继续使用及访问其完整工具套件,IronPDF许可证以有竞争力的定价模型开始,提供全面的C# PDF处理解决方案。

常见问题解答

如何在 C# 中使用 switch 语句来管理 PDF 处理?

您可以使用 switch 语句来管理 PDF 处理,通过根据条件(例如页面数量或文档类型)执行不同的 PDF 操作,使用类似 IronPDF 的库。

C# 中的 switch 语句和 switch 表达式之间的区别是什么?

switch 语句提供了一种结构化的方法来处理多个条件,通过 break 语句来防止穿透,而 switch 表达式更简洁,返回一个值,并消除了对 break 语句的需求。

为何默认情况在 C# switch 语句中很重要?

默认情况很关键,因为它确保意外值得到妥善处理,通过在没有 case 匹配表达式时提供后备操作来防止错误。

switch 表达式如何增强 C# 中代码的可读性?

switch 表达式通过提供一种简洁的条件分支语法来增强代码可读性,使开发人员能够以更紧凑的形式表达逻辑,从而使代码更易于理解和维护。

可以在 C# 应用程序中使用 switch 语句进行错误处理吗?

是的,switch 语句可以用于错误处理,通过根据错误代码或条件将程序引导到特定的错误处理例程,从而提高 C# 应用程序的健壮性。

使用 IronPDF 的 switch 语句的一个实际例子是什么?

一个实际的例子是使用 switch 语句根据 PDF 文档的页面数量或其他标准应用不同的水印,利用 IronPDF 进行 PDF 操作。

IronPDF 如何促进基于 switch 的 PDF 操作?

IronPDF 提供了一套强大的工具和方法,这些工具和方法可以在条件上使用 switch 语句触发,用于 PDF 转换、编辑和渲染等任务。

switch 语句在 PDF 处理中的一些常见用例是什么?

常见用例包括基于文档元数据应用不同的处理规则,例如根据文档类型或内容应用特定的格式或转换。

IronPDF 如何帮助使用 switch 语句创建可读和可维护的代码?

IronPDF 提供全面的 PDF 操作方法,这些方法可以通过 switch 语句组织,从而产生结构化逻辑的代码,使其既可读又易于维护。

switch 语句在决策中比 if-else 块具有什么优势?

switch 语句在处理多个离散条件时提供了更有组织性和更少错误的结构,增强了代码的清晰性并减少了与冗长的 if-else 链相比的错误可能性。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。