練習 - 實作 switch 陳述式

已完成

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":。 案例模式是評估為 truefalse 的布林運算式。 每個 switch 區段都包含少量的程式碼行,如果案例模式符合比對運算式,則會執行。 在此範例中,如果 fruit 已指派「apple」的值,則第一個案例模式會評估為 true,且該 switch 區段將會執行。

switch 陳述式至少必須包含一個 switch 區段,但是通常會包含三個或多個 switch 區段。

switch 最適合用於下列情況:

  • 您有想要根據許多可能值比對的單一值 (變數或運算式)。
  • 針對任何指定的相符項,您最多必須執行幾行程式碼。

注意

switch 陳述式的第一個範例其目的非常簡單,而且您對陳述式的檢查很簡短。 當您在以下各節中完成一些更進階的案例時,將會檢查 switch 陳述式的其他功能。

現在正是時候準備您的程式碼撰寫環境,並開始開發您自己的 switch 陳述式。

準備您的撰寫程式碼環境

本課程模組包含實際操作活動,可引導您完成建置及執行示範程式碼的程序。 我們鼓勵您使用 Visual Studio Code 做為開發環境來完成這些活動。 針對這些活動使用 Visual Studio Code,可協助您更熟悉在全球專業人員使用的開發人員環境中撰寫及執行程式碼。

  1. 打開 Visual Studio Code。

    您可以使用 Windows [開始] 功能表 (或另一個作業系統的對等資源) 來開啟 Visual Studio Code。

  2. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [開啟資料夾]。

  3. 在 [開啟資料夾] 對話方塊中,瀏覽至 Windows Desktop 資料夾。

    如果您在不同的資料夾位置中保留程式碼專案,您可以改用該資料夾位置。 針對本訓練,請務必使用容易找到並記住的位置。

  4. 在 [開啟資料夾] 對話方塊中,選取 [選取資料夾]。

    如果您看到詢問您是否信任作者的安全性對話方塊,請選取 [是]。

  5. 在 Visual Studio Code 的 [終端] 功能表上,選取 [新增終端]。

    請注意,終端面板中的命令提示字元會顯示目前資料夾的資料夾路徑。 例如:

    C:\Users\someuser\Desktop>
    

    注意

    如果您是在自己的電腦上工作,而不是在沙箱或託管環境中工作,且您已完成此 C# 系列中的其他 Microsoft Learn 課程模組,您可能已針對程式碼範例建立專案資料夾。 如果是這種情況,您可以略過下一個步驟,這個步驟會用來在 TestProject 資料夾中建立主控台應用程式。

  6. 在終端命令提示字元中,若要在指定的資料夾中建立新的主控台應用程式,請輸入 dotnet new console -o ./CsharpProjects/TestProject,然後按 Enter 鍵。

    這個 .NET CLI 命令會使用 .NET 程式範本,在指定的資料夾位置中建立新的 C# 主控台應用程式專案。 這個命令會為我們建立 CsharpProjects 和 TestProject 資料夾,並使用 TestProject 做為 .csproj 檔案的名稱。

  7. 在 [總管] 面板中,展開 CsharpProjects 資料夾。

    您應該會看到 TestProject 資料夾和兩個檔案:名為 Program.cs 的 C# 應用程式檔案,以及名為 TestProject.csproj 的 C# 專案檔。

  8. 在 [總管] 面板中,若要在 [編輯器] 面板中檢視程式碼檔案,請選取 [Program.cs]。

  9. 刪除現有的程式碼。

    您將使用此 C# 主控台專案,在本課程模組期間建立、建置及執行程式碼範例。

  10. 關閉 [終端] 面板。

建立及測試 switch 陳述式

  1. 請確定您已開啟 Visual Studio Code,並在 [編輯器] 面板中顯示 Program.cs。

    注意

    Program.cs 應該是空的。 如果不是空白,請選取並刪除所有程式碼。

  2. 在 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}");
    
  3. 在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。

    在建置或執行程式碼之前,必須先儲存 Program.cs 檔案。

  4. 在 [總管] 面板中,若要在 TestProject 資料夾位置開啟 [終端],請以滑鼠右鍵按一下 [TestProject],然後選取 [在整合式終端機中開啟]。

    [終端] 面板隨即開啟。 終端應該包含命令提示字元,顯示已對 TestProject 資料夾位置開啟終端。

  5. 在終端命令提示字元中,若要執行程式碼,請輸入 dotnet run,然後按 Enter 鍵。

    注意

    如果您看到訊息指出「找不到要執行的專案」,請確定終端命令提示字元會顯示預期的 TestProject 資料夾位置。 例如:C:\Users\someuser\Desktop\csharpprojects\TestProject>

    您應該會看見下列輸出:

    John Smith, Senior Associate
    
  6. 請花一分鐘檢閱您輸入的 switch 陳述式。

  7. 請注意,switch 陳述式會定義單一程式碼區塊。

    switch 陳述式會定義包含 switch 區段清單的單一程式碼區塊。 switch 關鍵字右邊是括號中的 switch 運算式

  8. 請注意程式碼區塊內的 switch 區段清單。

    switch 程式碼區塊包含 switch 區段的清單,每個區段都包含一或多個 switch 標籤。 此外,每個 switch 區段都包含陳述式清單,如果標籤等於在 switch 陳述式頂端定義的 switch 運算式,則會執行此清單。

    switch 運算式會根據案例標籤從上到下進行評估,直到找到等於 switch 運算式的值為止。 如果沒有任何標籤相符,則會執行 default 案例的陳述式清單。 如果未包含預設值,控制權會轉送至 switch 陳述式的端點。 每個標籤都必須提供符合 switch 運算式中所指定類型的實值型別。

    注意

    選擇性 default 標籤可以出現在 switch 區段清單中的任何位置。 不過,大部分開發人員都會選擇將其放在最後一個位置,因為將 default 放在最後的選項更為合理 (邏輯上)。 不論位置為何,都會最後評估 default 區段。

    在我們的範例中:

    • switch 運算式是 (employeeLevel)
    • 每個 switch 區段都有單一 switch 標籤 (case or default)。
    • 相符 switch 區段是由 case: 200 定義,因為 employeeLevel = 200
  9. 請注意,每個 switch 區段會與下一個區段分開。

    只允許執行一個 switch 區段。 這表示 switch 區段的執行不允許落入到下一個 switch 區段。 break 關鍵字是數種方式之一,可在 switch 區段到達下一個區段之前結束。 若您忘記 break 關鍵字 (或,選擇性的 return 關鍵字),編譯器將會產生錯誤。

變更等級變數值以查看 switch 陳述式如何評估該值

為了練習預設案例,讓我們透過修改值指派來變更員工的等級。

  1. 若要修改指派給 employeeLevel 的值,請更新您的程式碼,如下所示:

    int employeeLevel = 201;
    
  2. 儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。

    從終端命令提示字元輸入 dotnet run,以執行您的程式碼。

  3. 請注意輸出已變更。

    現在,當您執行程式碼時,您應該會看到使用更一般的職稱。

    John Smith, Associate
    

    因為 employeeLevel 不符合任何標籤,會比對 default 標籤。

修改 switch 區段以包含多個標籤

假設我們的公司決定將所有等級 100 的員工稱為「資深專員」,這與等級 200 的員工相同。 身為開發人員,您決定透過移除屬於標籤 case 100: 的第一個 switch 區段來實作此功能,並改為允許 case 100:case 200: 標籤執行相同的 switch 區段。

  1. 若要修改指派給 employeeLevel 的值,請更新您的程式碼,如下所示:

    int employeeLevel = 100;
    
  2. 若要將多個標籤指派給第一個 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}");
    
  3. 儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。

    從終端命令提示字元輸入 dotnet run,以執行您的程式碼。

    您應該會看見下列輸出:

    John Smith, Senior Associate
    

    案例標籤 100200 現在都符合將職稱設定為字串值 Senior Associate 的 switch 區段。

概括回顧

以下是您學到有關 switch 陳述式的主要重點:

  • 當您有一個具有可多可能符合項的值,而且每個比對都需要您程式碼邏輯中的分支時,請使用 switch 陳述式。
  • 包含程式碼邏輯的單一 switch 區段可以使用由 case 關鍵字定義的一或多個標籤來比對。
  • 使用選擇性的 default 關鍵字來建立標籤,以及當沒有任何其他案例標籤符合時要使用的 switch 區段。

知識檢查

1.

開發人員會撰寫程式碼來實作 switch-case 建構。 break 關鍵字的用途為何?

2.

開發人員會撰寫程式碼來實作 switch-case 建構,以針對許多可能的比對值評估變數。 其中包含 default 關鍵字作為 switch-case 建構的一部分。 default 關鍵字的用途為何?

3.

關於 switch-case 建構的下列陳述何者正確?