選取範圍語句 (c # 參考)

下列語句會根據運算式的值,從一些可能的語句中選取要執行的語句:

  • 語句:根據布林運算式的值選取要執行的語句。
  • 語句:根據符合運算式的模式比對,選取要執行的語句清單。

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沒有元件的語句只會 else 在布林運算式評估為 true 時執行主體,如下列範例所示:

    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 語句會使用下列模式:

  • 在 c # 9.0 和更新版本中可用的 關聯式模式 () :比較運算式結果與常數。
  • 在 c # 7.0 和更新版本中可使用的 常數模式 () :測試運算式結果是否等於常數。

重要

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

上述範例也會示範 default 案例。 當比對運算式不符合任何其他案例模式時,此 default 案例會指定要執行的語句。 如果比對運算式不符合任何大小寫模式,而且沒有任何大小寫,則控制權會透過 switch 語句進行 default

switch語句會在第一個switch 區段中,執行case 模式符合比對運算式的switch,如果有的話,則會評估為 switch語句會依文字順序從上到下評估案例模式。 當語句包含無法連線的案例時 switch ,編譯器會產生錯誤。 這種情況是指已由大寫或其模式無法比對的情況。

注意

default案例可以出現在語句內 switch 的任何位置。 無論其位置為何, default 一律會最後評估案例,而且只有在所有其他案例模式都不相符的情況下才會進行評估。

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

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在語句中,控制項無法從某個參數區段到下一個切換區段。 如本節中的範例所示,您通常會在每個參數區段的結尾使用 break 語句,以將控制權 switch 傳遞給語句。 您也可以使用 returnthrow 語句來將控制權 傳遞至語句。 若要模擬迴圈行為並將控制權傳遞給其他 switch 區段,您可以使用 語句。

在運算式內容中,您可以使用 運算式根據符合運算式的模式比對,從候選運算式清單中評估單一運算式。

案例防護

Case 模式可能沒有足夠的表達方式可指定執行 switch 區段的條件。 在這種情況下,您可以使用 案例防護。 這是必須搭配相符模式一起滿足的額外條件。 案例防護必須是布林運算式。 您可以在採用模式的關鍵字之後 when 指定 case 防護,如下列範例所示:

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 # 7.0 開始的模式比對 switch 。 從那時起,每個主要 c # 版本都會加入新的模式類型。 如需詳細資訊,請參閱 模式

在 c # 6 及更早的版本中,您可以使用 switch 語句,但有下列限制:

  • 比對運算式必須屬於下列其中一種類型: charstringbool整數數值 類型或 列舉 類型。
  • 標籤中 case 只允許常數運算式。

C# 語言規格

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

  • 語句
  • 語句

如需有關 c # 7.0 和更新版本中所引進之功能的詳細資訊,請參閱下列功能提案附注:

另請參閱