[英]Using a switch case statement with a List in c#
我在打開列表時無法讓 Switch Case 語句工作
List<int> Test = new List<int>(){9, 6, 5};
switch(Test)
{
case new List<int>(){9, 6, 5}:
Console.Write("Yes");
break;
case new List<int>(){2, 4, 8}:
Console.Write("No");
break;
}
我收到錯誤“開關表達式或案例標簽必須是布爾、字符、字符串、整數、枚舉或相應的可空類型”。
switch 語句是否不適用於 List 和 Arrays 等集合類型?
C#11(在編寫時仍處於預覽狀態)讓您了解了列表模式,在您的示例中可能看起來像這樣(我無法完全測試這一點,所以請謹慎對待 - @MatthewWatson 發布了一個版本沒有保護套):
List<int> Test = new List<int>(){9, 6, 5};
switch(Test)
{
case var _ when Test is [9, 6, 5]:
Console.Write("Yes");
break;
case var _ when Test is [2, 4, 8]:
Console.Write("No");
break;
}
在那之前,您可以像他們在這里所做的那樣使用案例保護來做到這一點,這可能看起來像這樣:
List<int> Test = new List<int>(){9, 6, 5};
switch(Test)
{
// maybe implement it like some of the answers here https://stackoverflow.com/questions/876508/what-is-the-best-way-to-check-two-listt-lists-for-equality-in-c-sharp
case var _ when Helper.AreEquivalent(Test, new List<int>(){9, 6, 5}):
Console.Write("Yes");
break;
case var _ when Helper.AreEquivalent(Test, new List<int>(){2, 4, 8}):
Console.Write("No");
break;
}
您可以使用新的 C# 11 模式匹配來解決此問題。 如果您將以下內容添加到項目文件(假設 SDK 樣式的項目),您現在可以在 Visual Studio 2022(預覽形式)中啟用它:
<LangVersion>preview</LangVersion>
請注意,在 C# 11 發布之前預覽功能可能會發生變化,因此在此之前您不能依賴此 C# 11 功能。
然后你可以像這樣寫一個 switch 語句:
switch (Test)
{
case [9, 6, 5]:
Console.WriteLine("Yes");
break;
case [2, 4, 8]:
Console.WriteLine("No");
break;
}
請注意,如果您嘗試返回一個值而不是調用返回 void 的方法,則可以改用 Switch 表達式,這對某些事情來說更好。
假設您要返回一個字符串:
Console.WriteLine(Test switch
{
[9, 6, 5] => "Yes",
[2, 4, 8] => "No",
_ => "Other"
});
但是當然,如果您使用的是 switch 表達式,則必須為它提供一個默認值,以便在沒有找到匹配的情況下返回。
Switch 語句僅適用於原始數據類型,即 int、string、bool 等。您可以為此使用 if else 條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.