選取陳述式:if
、if-else
和 switch
if
、if-else
和 switch
陳述式會根據運算式的值,選取要從許多可能路徑執行的陳述式。 只有當提供的布林運算式評估為 true
時,if
陳述式才會執行陳述式。 if-else
陳述式可讓您根據布林運算式,從要遵循的兩個程式碼路徑中選擇其中之一。 switch
陳述式會根據與運算式的模式比對,選取要執行的陳述式清單。
if
陳述式
if
陳述式可以是下列兩種格式之一:
具有
else
部分的if
陳述式會根據布林運算式的值選取兩個陳述式之一,如下列範例所示: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!"); } }
只有布林運算式評估為
true
時,沒有else
組件的if
陳述式才會執行其主體,如下列範例所示: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
陳述式會在第一個switch 區段中執行陳述式清單,其案例模式符合比對運算式,且其案例成立條件評估為 true
(如果存在)。 switch
陳述式會評估文字順序從上到下的大小寫模式。 當 switch
陳述式包含無法連線的情況時,編譯器會產生錯誤。 這是已由大寫處理或無法比對其模式的情況。
注意
案例 default
可以出現在 switch
陳述式中的任何位置。 不論其位置為何,只有在所有其他案例模式不相符或 goto default;
陳述式在其中一個 switch 區段中執行時,才會評估 default
案例。
您可以為 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
陳述式中,控制項無法從一個參數區段到下一個參數區段。 如本節所示的範例,您通常會在每個參數區段結尾使用 break
陳述式,將控制權傳出 switch
陳述式。 您也可以使用 return 和 throw 陳述式,將控制權傳出 switch
陳述式。 若要模擬中斷行為並將控制權傳遞至其他 switch 區段,您可以使用goto
陳述式。
在運算式內容中,您可以使用 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# 語言規格的模式和模式比對一節。