[C#技巧]从C#到C# 8、C# 9,简化switch语句越来越惊艳
作者:admin 时间:2023-5-6 10:2:0 浏览:当我们想要评估某个对象并根据可能的值集返回不同的结果时,switch
语句会非常有用。
按照正常的写法,switch
语句,逻辑结构非常清晰,就像if-else
一样,代码量挺多的,下面是一个例子:
switch (DateTime.Now.DayOfWeek)
{
case DayOfWeek.Monday:
return "Not Weekend";
case DayOfWeek.Tuesday:
return "Not Weekend";
case DayOfWeek.Wednesday:
return "Not Weekend";
case DayOfWeek.Thursday:
return "Not Weekend";
case DayOfWeek.Friday:
return "Not Weekend";
case DayOfWeek.Saturday:
return "Weekend";
case DayOfWeek.Sunday:
return "Weekend";
default:
throw new ArgumentOutOfRangeException();
}
可以看到,我们必须编写大量代码。
C# 简化 switch
在C#里,我们可以通过使用 case
的语句来简化它:
switch (DateTime.Now.DayOfWeek)
{
case DayOfWeek.Monday:
case DayOfWeek.Tuesday:
case DayOfWeek.Wednesday:
case DayOfWeek.Thursday:
case DayOfWeek.Friday:
return "Not Weekend";
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
return "Weekend";
default:
throw new ArgumentOutOfRangeException();
}
这样看起来,是不是好了一点?
C# 8 简化 switch
从 C# 8 开始,引入了 switch
表达式(什么是C#中的switch表达式?),以帮助我们进一步减少必须编写的代码量。
让我们将之前的 switch
语句转换为 switch
表达式:
DateTime.Now.DayOfWeek switch
{
DayOfWeek.Monday => "Not Weekend",
DayOfWeek.Tuesday => "Not Weekend",
DayOfWeek.Wednesday => "Not Weekend",
DayOfWeek.Thursday => "Not Weekend",
DayOfWeek.Friday => "Not Weekend",
DayOfWeek.Saturday => "Weekend",
DayOfWeek.Sunday => "Weekend",
_ => throw new ArgumentOutOfRangeException()
}
可以看到,它比以前更加简洁和可读。
C# 9 简化 switch
从 C# 9 开始,我们还可以在 switch
表达式中使用逻辑模式。
逻辑or
模式非常适合我们要实现的目标:
DateTime.Now.DayOfWeek switch
{
DayOfWeek.Monday or DayOfWeek.Tuesday or DayOfWeek.Wednesday or DayOfWeek.Thursday or DayOfWeek.Friday => "Not Weekend",
DayOfWeek.Saturday or DayOfWeek.Sunday => "Weekend",
_ => throw new ArgumentOutOfRangeException()
}
我们可以介绍的最后一个优化是使用否定逻辑模式not
:
DateTime.Now.DayOfWeek switch
{
not (DayOfWeek.Saturday or DayOfWeek.Sunday) => "Not Weekend",
DayOfWeek.Saturday or DayOfWeek.Sunday => "Weekend",
_ => throw new ArgumentOutOfRangeException()
}
什么是 C# 中的 switch 表达式?
在 C# 7.0 中,switch
语句通过模式变得更加强大。在 switch
表达式中,所有情况都是表达式,因此它是一个更“轻量级”的版本。在下面的代码中,任何人都可以分析它到底在做什么。
var operation = 2;
var result = operation switch
{
1 => "Case 1",
2 => "Case 2",
3 => "Case 3",
4 => "Case 4",
};
Console.WriteLine(result);
在上面的代码中,任何人都能发现没有'case'、'break'(或return)语句。在 switch
表达式中,这些关键字不是必需的。冒号 (:) 替换为箭头 (=>)。它只不过是表达式,箭头后面的一切都是表达式。还有一个关键字,即“default”,它也被替换为“_”(下划线)。
下面的代码显示了默认情况下的所有情况。
var operation = 2;
var result = operation switch
{
1 => "Case 1",
2 => "Case 2",
3 => "Case 3",
4 => "Case 4",
_ => "No case availabe"
};
Console.WriteLine(result);
总结
本文介绍了从C#到C# 8、C# 9,简化switch
语句越来越惊艳的写法。
相关文章
- 站长推荐