技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

[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语句越来越惊艳的写法。

相关文章

标签: asp.net  CSharp  switch  代码性能  优化  
x
  • 站长推荐
/* 左侧显示文章内容目录 */