目录
理解 Switch 语句
switch
语句提供了一种结构化的方法,根据表达式的值选择要执行的代码块。在处理多个可能值时,它比冗长的if-else if
链更有效。基本语法如下:
switch (expression)
{
case value1:
// 如果 expression == value1,则执行的代码
break;
case value2:
// 如果 expression == value2,则执行的代码
break;
default:
// 如果没有匹配的 case,则执行的代码
break;
}
break
语句至关重要;它可以防止“贯穿”到后续的 case。如果没有它,即使当前 case 匹配,执行也会继续到下一个 case。
在 C# Switch 语句中使用字符串
在 C# 8 之前,在switch
语句中使用字符串需要繁琐的变通方法。C# 8 引入了模式匹配,可以在switch
语句中直接进行字符串比较,从而显著提高了代码的可读性和可维护性。
string day = "Monday";
switch (day)
{
case "Monday":
Console.WriteLine("工作周开始!");
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
Console.WriteLine("周中工作!");
break;
case "Friday":
Console.WriteLine("周末快到了!");
break;
case "Saturday":
case "Sunday":
Console.WriteLine("周末时间!");
break;
default:
Console.WriteLine("输入的日期无效。");
break;
}
此示例演示了如何有效地处理各种字符串值。请注意,无需嵌套if
语句即可组合多个 case。
大小写敏感性
C# 的switch
语句中的字符串比较是区分大小写的。对于不区分大小写的比较,请在比较之前将字符串转换为小写(或大写):
string day = "monday";
switch (day.ToLower())
{
case "monday":
Console.WriteLine("工作周开始!");
break;
// ... 其他 case ...
}
Switch 表达式提升可读性
C# 8 还引入了 switch 表达式,它提供了更紧凑的语法。前面的示例变为:
string day = "Monday";
string message = day switch
{
"Monday" => "工作周开始!",
"Tuesday", "Wednesday", "Thursday" => "周中工作!",
"Friday" => "周末快到了!",
"Saturday", "Sunday" => "周末时间!",
_ => "输入的日期无效。"
};
Console.WriteLine(message);
Switch 表达式通常因其简洁性和改进的可读性而受到青睐,尤其是在有多个 case 的情况下。
结论
C# 8 的模式匹配简化了在switch
语句中使用字符串的方法,与旧的if-else if
方法相比,提高了代码的可读性和可维护性。请记住大小写敏感性,并考虑使用 switch 表达式来编写更优雅的代码。
常见问题
- 问:switch 语句中字符串的长度是否有限制? 答:没有,没有固有的限制。非常长的字符串可能会对性能产生轻微的影响,但这通常微不足道。
- 问:如果省略
break
语句会发生什么? 答:会发生贯穿;执行将继续到下一个 case,这可能会导致意外的行为。始终包含break
语句(或使用 switch 表达式)。 - 问:switch 表达式总是更快吗? 答:性能差异通常可以忽略不计。优先考虑可读性和可维护性;switch 表达式通常会使代码更清晰。