技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

[C#技巧]從C#到C# 8、C# 9,簡化switch語句越來越驚艷

作者:admin    時(shí)間:2023-5-6 10:2:0    瀏覽:

當(dāng)我們想要評(píng)估某個(gè)對(duì)象并根據(jù)可能的值集返回不同的結(jié)果時(shí),switch 語句會(huì)非常有用。

按照正常的寫法,switch語句,邏輯結(jié)構(gòu)非常清晰,就像if-else一樣,代碼量挺多的,下面是一個(gè)例子:

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();
}

這樣看起來,是不是好了一點(diǎn)?

C# 8 簡化 switch

從 C# 8 開始,引入了 switch 表達(dá)式(什么是C#中的switch表達(dá)式?),以幫助我們進(jìn)一步減少必須編寫的代碼量。

讓我們將之前的 switch 語句轉(zhuǎn)換為 switch 表達(dá)式:

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 表達(dá)式中使用邏輯模式。

邏輯or模式非常適合我們要實(shí)現(xiàn)的目標(biāo):

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()
}

我們可以介紹的最后一個(gè)優(yōu)化是使用否定邏輯模式not

DateTime.Now.DayOfWeek switch
{
    not (DayOfWeek.Saturday or DayOfWeek.Sunday) => "Not Weekend",
    DayOfWeek.Saturday or DayOfWeek.Sunday => "Weekend",
    _ => throw new ArgumentOutOfRangeException()
}

什么是 C# 中的 switch 表達(dá)式?

在 C# 7.0 中,switch 語句通過模式變得更加強(qiáng)大。在 switch 表達(dá)式中,所有情況都是表達(dá)式,因此它是一個(gè)更“輕量級(jí)”的版本。在下面的代碼中,任何人都可以分析它到底在做什么。

var operation = 2;  
  
var result = operation switch  
{  
    1 => "Case 1",  
    2 => "Case 2",  
    3 => "Case 3",  
    4 => "Case 4",  
};  
  
Console.WriteLine(result); 

在上面的代碼中,任何人都能發(fā)現(xiàn)沒有'case'、'break'(或return)語句。在 switch 表達(dá)式中,這些關(guān)鍵字不是必需的。冒號(hào) (:) 替換為箭頭 (=>)。它只不過是表達(dá)式,箭頭后面的一切都是表達(dá)式。還有一個(gè)關(guān)鍵字,即“default”,它也被替換為“_”(下劃線)。

下面的代碼顯示了默認(rèn)情況下的所有情況。

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);  

總結(jié)

本文介紹了從C#到C# 8、C# 9,簡化switch語句越來越驚艷的寫法。

相關(guān)文章

標(biāo)簽: asp.net  CSharp  switch  代碼性能  優(yōu)化  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */