|
|
|
|
|
當(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)文章