共用方式為


Selection 語句 - ifif-elseswitch

ifif-elseswitch 語句會根據表達式的值,選取要從許多可能路徑執行的語句。 if 只有當提供的布爾表示式評估為 true時,語句才會執行 語句。 if-else語句可讓您根據布爾表達式來選擇要遵循的兩個程式代碼路徑之一。 語句switch會根據與表達式的模式比對,選取要執行的語句清單。

if 陳述式

if語句可以是下列兩種形式之一:

  • if具有else部分的語句會根據布爾表達式的值選取要執行的兩個語句之一,如下列範例所示:

    DisplayWeatherReport(15.0);  // Output: Cold.
    DisplayWeatherReport(24.0);  // Output: Perfect!
    
    void DisplayWeatherReport(double tempInCelsius)
    {
        if (tempInCelsius < 20.0)
        {
            Console.WriteLine("Cold.");
        }
        else
        {
            Console.WriteLine("Perfect!");
        }
    }
    
  • if只有布爾表達式評估為 true時,沒有else元件的語句才會執行其主體,如下列範例所示:

    DisplayMeasurement(45);  // Output: The measurement value is 45
    DisplayMeasurement(-3);  // Output: Warning: not acceptable value! The measurement value is -3
    
    void DisplayMeasurement(double value)
    {
        if (value < 0 || value > 100)
        {
            Console.Write("Warning: not acceptable value! ");
        }
    
        Console.WriteLine($"The measurement value is {value}");
    }
    

您可以巢狀 if 語句來檢查多個條件,如下列範例所示:

DisplayCharacter('f');  // Output: A lowercase letter: f
DisplayCharacter('R');  // Output: An uppercase letter: R
DisplayCharacter('8');  // Output: A digit: 8
DisplayCharacter(',');  // Output: Not alphanumeric character: ,

void DisplayCharacter(char ch)
{
    if (char.IsUpper(ch))
    {
        Console.WriteLine($"An uppercase letter: {ch}");
    }
    else if (char.IsLower(ch))
    {
        Console.WriteLine($"A lowercase letter: {ch}");
    }
    else if (char.IsDigit(ch))
    {
        Console.WriteLine($"A digit: {ch}");
    }
    else
    {
        Console.WriteLine($"Not alphanumeric character: {ch}");
    }
}

在表達式內容中,您可以使用 條件運算符 ?: ,根據布爾表達式的值來評估這兩個表達式的其中一個。

switch 陳述式

語句 switch 會根據模式比對與比對表達式選取要執行的語句清單,如下列範例所示:

DisplayMeasurement(-4);  // Output: Measured value is -4; too low.
DisplayMeasurement(5);  // Output: Measured value is 5.
DisplayMeasurement(30);  // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN);  // Output: Failed measurement.

void DisplayMeasurement(double measurement)
{
    switch (measurement)
    {
        case < 0.0:
            Console.WriteLine($"Measured value is {measurement}; too low.");
            break;

        case > 15.0:
            Console.WriteLine($"Measured value is {measurement}; too high.");
            break;

        case double.NaN:
            Console.WriteLine("Failed measurement.");
            break;

        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

在上述範例中 switch ,語句會使用下列模式:

這很重要

如需 語句所支援 switch 之模式的資訊,請參閱 模式

上述範例也會示範此 default 案例。 當比對表達式不符合任何其他案例模式時,案例 default 會指定要執行的語句。 如果比對表達式不符合任何案例模式,而且沒有任何 default 案例,則控件會通過 switch 語句。

語句會在第一個switch參數區段中執行語句清單,其案例模式符合相符表達式,如果存在,則其案例防護會評估為 trueswitch語句會根據文字順序從上到下評估案例模式。 當語句包含無法連線的情況時 switch ,編譯程式會產生錯誤。 這是已由大寫或模式無法比對的案例。

備註

default 案例可以出現在語句中的任何 switch 位置。 不論其位置為何, default 只有在所有其他案例模式不相符或 goto default; 語句在其中一個 switch 區段中執行時,才會評估案例。

您可以為 語句的一個 switch 區段指定多個案例模式,如下列範例所示:

DisplayMeasurement(-4);  // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50);  // Output: Measured value is 50.
DisplayMeasurement(132);  // Output: Measured value is 132; out of an acceptable range.

void DisplayMeasurement(int measurement)
{
    switch (measurement)
    {
        case < 0:
        case > 100:
            Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
            break;
        
        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

switch在語句中,控件無法從一個參數區段跌至下一個參數區段。 如本節中的範例所示,您通常會在每個 switch 區段結尾使用 break 語句,將控制權傳出 switch 語句。 您也可以使用 returnthrow 語句,將控制權傳出 switch 語句。 若要模仿遞歸行為,並將控制權傳遞至其他 switch 區段,您可以使用 goto 語句

這很重要

每個 switch 區段 都必須以 breakgotoreturn結尾。 從一個參數區段跌至下一個參數區段會產生編譯程序錯誤。 不過,多個交換器標籤可以套用至相同的參數區段,例如 case < 0: 上述範例。 這種刻意的設計選擇可讓您簡潔地處理共用相同或相互相依邏輯的多個案例。

在表達式內容中switch,您可以使用 表達式,根據與表達式的模式比對,從候選表達式清單中評估單一表達式。

這很重要

switch 運算式switch 語句之間的差異:

  • switch 語句 是用來控制程式碼區塊內的執行流程。
  • switch 運算式 通常用於值傳回和值指派的內容,通常是 表達式主體成員
  • switch 表達式案例區段不能是空的,switch 語句可以。

案例防護

案例模式可能不夠表達,無法指定參數區段執行的條件。 在這種情況下,您可以使用 案例防護。 這是必須與相符模式一起滿足的額外條件。 案例防護必須是布爾表達式。 您可以在遵循模式的 when 關鍵詞後面指定案例防護,如下列範例所示:

DisplayMeasurements(3, 4);  // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5);  // Output: Both measurements are valid and equal to 5.

void DisplayMeasurements(int a, int b)
{
    switch ((a, b))
    {
        case (> 0, > 0) when a == b:
            Console.WriteLine($"Both measurements are valid and equal to {a}.");
            break;

        case (> 0, > 0):
            Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
            break;

        default:
            Console.WriteLine("One or both measurements are not valid.");
            break;
    }
}

上述範例會使用具有巢狀關係模式的位置模式

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格的下列幾節:

如需模式的詳細資訊,請參閱 C# 語言規格模式和模式比對一節。

另請參閱