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

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

[C#技巧]從C#到C# 8、C# 9,簡(jiǎn)化switch語(yǔ)句越來(lái)越驚艷

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

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

按照正常的寫(xiě)法,switch語(yǔ)句,邏輯結(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();
}

可以看到,我們必須編寫(xiě)大量代碼。

C# 簡(jiǎn)化 switch

在C#里,我們可以通過(guò)使用 case 的語(yǔ)句來(lái)簡(jiǎn)化它:

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

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

C# 8 簡(jiǎn)化 switch

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

讓我們將之前的 switch 語(yǔ)句轉(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()
}

可以看到,它比以前更加簡(jiǎn)潔和可讀。

C# 9 簡(jiǎn)化 switch

從 C# 9 開(kāi)始,我們還可以在 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 語(yǔ)句通過(guò)模式變得更加強(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)沒(méi)有'case'、'break'(或return)語(yǔ)句。在 switch 表達(dá)式中,這些關(guān)鍵字不是必需的。冒號(hào) (:) 替換為箭頭 (=>)。它只不過(guò)是表達(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,簡(jiǎn)化switch語(yǔ)句越來(lái)越驚艷的寫(xiě)法。

相關(guān)文章

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