練習 - 實作 switch 陳述式
- 11 分鐘
switch語句是 C# 選取語句,可提供分支建構的if-elseif-else替代方案。 當評估單一值相對於已知比對值清單時,switch 語句比 if-elseif-else 結構提供更多優勢。
試想以下情況:
- 您正在處理與食物營養相關的應用程式。 程式代碼的區段會處理水果。
- 您的程式代碼包含名為
fruit的變數,用來保存不同類型的水果名稱。 - 您有應用程式所關注的 20 個水果清單。
- 您想要根據指派給
fruit的值來分支程式碼。
在此案例中,您可以使用 switch 語句為每個水果類型建立個別分支。
switch 陳述式如何運作?
switch語句會從可能的 switch 區段清單中選擇一個程式代碼區段來執行。 選取的 switch 區段會根據具有陳述式比對運算式的模式比對來選擇。
請考慮下列程式代碼範例,其中顯示 語句的基本結構 switch :
switch (fruit)
{
case "apple":
Console.WriteLine($"App will display information for apple.");
break;
case "banana":
Console.WriteLine($"App will display information for banana.");
break;
case "cherry":
Console.WriteLine($"App will display information for cherry.");
break;
}
比對表達式(也稱為 switch 運算式)是關鍵詞後面的 switch 值,在此案例中為 (fruit)。 每個 switch 區段 都是由 案例模式所定義。 案例模式是使用 關鍵詞 case 來建構,後面接著 值。 此範例中的第一個案例模式是: case "apple":。 範例模式是評估為 true 或 false 的布爾表達式。 每個 switch 區段都包含少量的程式代碼行,如果案例模式與比對表達式相符,則會執行這些程式代碼行。 在此範例中,如果 fruit 指派了 「apple」 的值,則第一個案例模式會評估為 true ,且該 switch 區段將會執行。
switch 語句必須至少包含一個 switch 區段,但通常會包含三個或多個 switch 區段。
switch 最適合用於下列情況:
- 您有想要與許多可能值相符的單一值(變數或表達式)。
- 針對任何指定的相符項,您最多必須執行幾行程式碼。
備註
switch 陳述式的第一個範例其目的非常簡單,而且您對陳述式的檢查很簡短。 當您在以下各節中完成一些更進階的案例時,將會檢查 switch 陳述式的其他功能。
是時候準備撰寫程式代碼環境並開始開發您自己的 switch 語句了。
準備您的撰寫程式碼環境
本課程模組包含實際操作活動,可引導您完成建置及執行示範程式碼的程序。 建議您使用 Visual Studio Code 作為開發環境來完成這些活動。 針對這些活動使用 Visual Studio Code,可協助您更熟悉在全球專業人員使用的開發人員環境中撰寫及執行程式碼。
開啟 Visual Studio Code。
您可以使用 Windows [開始] 功能表 (或另一個作業系統的對等資源) 來開啟 Visual Studio Code。
在 Visual Studio Code 的 [檔案] 功能表上,選取 [開啟資料夾]。
在 [開啟資料夾] 對話方塊中,瀏覽至 Windows Desktop 資料夾。
如果您在不同的資料夾位置中保留程式碼專案,您可以改用該資料夾位置。 對於這次訓練,重要的是要有一個容易找到並記住的地點。
在 [開啟資料夾] 對話方塊中,選取 [選取資料夾]。
如果您看到詢問您是否信任作者的安全性對話方塊,請選取 [是]。
在 Visual Studio Code 的 [終端] 功能表上,選取 [新增終端]。
請注意,終端面板中的命令提示字元會顯示目前資料夾的資料夾路徑。 例如:
C:\Users\someuser\Desktop>備註
如果您是在自己的電腦上工作,而不是在沙箱或託管環境中工作,且您已完成此 C# 系列中的其他 Microsoft Learn 課程模組,您可能已針對程式碼範例建立專案資料夾。 如果是這種情況,您可以略過下一個步驟,這個步驟會用來在 TestProject 資料夾中建立主控台應用程式。
在終端機命令提示字元中,若要在指定的資料夾中建立新的控制台應用程式,請輸入下列提示:
dotnet new console -o ./CsharpProjects/TestProject這個 .NET CLI 命令會使用 .NET 程式範本,在指定的資料夾位置中建立新的 C# 主控台應用程式專案。 這個命令會為您建立 CsharpProjects 和 TestProject 資料夾,並使用 TestProject 做為
.csproj檔案的名稱。如果顯示訊息,告知您檔案已經存在,請繼續進行後續步驟。 您將重複使用現有的項目檔。
在EXPLORER檢視中,展開 CsharpProjects 資料夾。
您應該會看到 TestProject 資料夾和兩個檔案、名為 Program.cs 的 C# 程式檔,以及名為 TestProject.csproj 的 C# 項目檔。
在 Visual Studio Code 的 [檔案] 功能表上,選取 [開啟資料夾]。
在 [ 開啟資料夾] 對話框中,選取 CsharpProjects 資料夾,然後選取 [ 選取資料夾]。
在 EXPLORER 檢視中,展開 [TestProject] 資料夾,然後選取 [Program.cs]。
刪除現有的程式碼。
您將使用此 C# 主控台專案,在本課程模組期間建立、建置及執行程式碼範例。
關閉 [終端] 面板。
建立及測試 switch 陳述式
請確定您已開啟 Visual Studio Code,並在 [編輯器] 面板中顯示 Program.cs。
備註
Program.cs 應該是空的。 如果不是空白,請選取並刪除所有程式碼。
在 Visual Studio Code 編輯器中輸入下列程式碼:
int employeeLevel = 200; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: title = "Junior Associate"; break; case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。
在建置或執行程式碼之前,必須先儲存 Program.cs 檔案。
在 [Explorer] 面板中,若要在 TestProject 資料夾位置開啟終端機,請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中打開]。
終端視窗將開啟。 終端應包含命令提示字元,顯示已對 TestProject 資料夾位置開啟終端。
在終端命令提示字元中,若要執行程式碼,請輸入 dotnet run,然後按 Enter 鍵。
備註
如果您看到訊息指出「找不到要執行的專案」,請確定終端命令提示字元會顯示預期的 TestProject 資料夾位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>您應該會看到下列輸出:
John Smith, Senior Associate花一分鐘的時間檢閱
switch您輸入的語句。請注意,
switch語句會定義單一程式代碼區塊。switch語句會定義包含 switch 區段清單的單一程式代碼區塊。 關鍵詞switch的右邊是用括號括起來的 switch 運算式。請注意程式代碼區塊內的 switch 區段清單。
代碼區塊
switch包含一份 切換區段 清單,每個區段都包含一或多個切換標籤。 此外,每個 switch 區段都包含語句清單,如果標籤等於 switch 語句頂端定義的 switch 運算式,則會執行此清單。switch 表達式將從上到下依次與 case 標籤進行比較評估,直到找到等於 switch 表達式的值為止。 如果沒有任何標籤相符,則會執行
default案例的語句列表。 如果未包含任何預設值,則會將控件傳送至 switch 語句的結束點。 每個標籤都必須提供符合 switch 運算式中所指定類型的實值型別。備註
選擇性
default標籤可以出現在切換區段清單中的任何位置。 不過,大多數開發人員都選擇將它放在最後一個選項上,因為它更有意義(邏輯上)定位default為最終選項。 不論位置為何,default區段將最後被評估。在我們的範例中:
- 開關表達式為
(employeeLevel) - 每個 switch 區段都有單一交換器標籤 (
case或default)。 - 相符 switch 區段是由
case: 200定義,因為employeeLevel = 200。
- 開關表達式為
請注意,每個 switch 區段會與下一個區段分開。
只允許執行一個 switch 區段。 這表示 switch 區段的執行不允許落入到下一個 switch 區段。
break關鍵字是數種方式之一,可在 switch 區段到達下一個區段之前結束。 若您忘記break關鍵字 (或,選擇性的return關鍵字),編譯器將會產生錯誤。
變更層級變數值,以查看 switch 語句如何評估它
為了練習預設案例,讓我們透過修改值指派來變更員工的等級。
若要修改指派給
employeeLevel的值,請更新您的程序代碼,如下所示:int employeeLevel = 201;儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。請注意,輸出已變更。
現在,當您執行程式代碼時,應該會看到使用的泛型標題。
John Smith, Associate因為
employeeLevel不符合任何標籤,會比對default標籤。
修改 switch 區段以包含多個標籤
假設我們公司決定將所有層級 100 名員工命名為「高級同事」,與 200 名員工相同的職稱。 身為開發人員,您決定藉由移除屬於case 100:標籤的第一個 switch 區段來實行這項作業,並改為允許case 100:和case 200:標籤執行同一個 switch 區段。
若要修改指派給
employeeLevel的值,請更新您的程序代碼,如下所示:int employeeLevel = 100;若要將多個標籤指派給第一個 switch 區段,請更新您的程式代碼,如下所示:
case 100: case 200: title = "Senior Associate"; break;當您完成變更時,修改應該符合下列程序代碼:
int employeeLevel = 100; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run,以執行您的程式碼。您應該會看到下列輸出:
John Smith, Senior Associate案例標籤
100和200現在會與 switch 區段配對,將標題設定為字串值Senior Associate。
回顧
以下是您學到有關 switch 陳述式的主要重點:
- 當您有一個具有可多可能符合項的值,而且每個比對都需要您程式碼邏輯中的分支時,請使用
switch陳述式。 - 包含程式代碼邏輯的單一切換區段可以使用
case關鍵詞定義的一或多個標籤進行匹配。 - 使用選擇性的
default關鍵字來建立標籤,以及當沒有任何其他案例標籤符合時要使用的 switch 區段。
知識檢定
意見反應
此頁面對您有幫助嗎?
No
需要本主題的協助嗎?
想要嘗試使用 Ask Learn 來釐清或引導您完成本主題嗎?