Příkazy výběru - if
, if-else
a switch
if-else
Příkazy if
a switch
příkazy select příkazy, které se mají provést z mnoha možných cest na základě hodnoty výrazu. Příkaz if
spustí příkaz pouze v případě, že se zadaný logický výraz vyhodnotí jako true
. Příkaz if-else
umožňuje zvolit, které ze dvou cest kódu se mají sledovat na základě logického výrazu. Příkaz switch
vybere seznam příkazů, který se má spustit na základě shody vzoru s výrazem.
Příkaz if
Příkaz if
může být libovolný z následujících dvou forem:
Příkaz
if
selse
částí vybere jeden ze dvou příkazů, které se mají provést na základě hodnoty logického výrazu, jak ukazuje následující příklad: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!"); } }
Příkaz
if
bezelse
části provede jeho tělo pouze v případě, že se logický výraz vyhodnotí jakotrue
, jak ukazuje následující příklad: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}"); }
Příkazy můžete vnořit if
a zkontrolovat více podmínek, jak ukazuje následující příklad:
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}");
}
}
V kontextu výrazu můžete pomocí podmíněného operátoru ?:
vyhodnotit jeden ze dvou výrazů na základě hodnoty logického výrazu.
Příkaz switch
Příkaz switch
vybere seznam příkazů, který se má provést na základě shody vzoru s výrazem shody, jak ukazuje následující příklad:
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;
}
}
V předchozím příkladu switch
příkaz používá následující vzory:
- Relační vzor: porovnání výsledku výrazu s konstantou.
- Konstantní vzor: Otestujte, jestli se výsledek výrazu rovná konstantě.
Důležité
Informace o vzorech podporovaných příkazem switch
najdete v tématu Vzory.
Předchozí příklad také ukazuje default
případ. Případ default
určuje příkazy, které se mají provést, když se výraz shody neshoduje s žádným jiným vzorem případu. Pokud se výraz shody neshoduje s žádným vzorem případu a neexistuje žádný default
případ, ovládací prvek projde příkazem switch
.
Příkaz spustí seznam příkazů v první části přepínače, jejíž vzor případu odpovídá výrazu shody a jehož případová ochrana, pokud existuje, se vyhodnotí jako true
.switch
Příkaz switch
vyhodnocuje vzory velkých a malých písmen v textovém pořadí shora dolů. Kompilátor vygeneruje chybu, pokud switch
příkaz obsahuje nedostupný případ. To je případ, který je již zpracován velkými písmeny nebo jehož vzor není možné spárovat.
Poznámka:
Případ default
se může objevit na libovolném switch
místě v rámci příkazu. Bez ohledu na jeho pozici se případ vyhodnotí pouze v případě, default
že se neshodují všechny ostatní vzory případů nebo se goto default;
příkaz spustí v některé z částí switch.
Pro jednu část switch
příkazu můžete zadat více vzorů případů, jak ukazuje následující příklad:
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
V rámci příkazu nemůže ovládací prvek projít z jednoho oddílu přepínače na další. Jak ukazuje příklad v této části, obvykle používáte break
příkaz na konci každého oddílu přepínače k předání kontroly z switch
příkazu. Příkazy return a throw můžete také použít k předání kontroly příkazuswitch
. Pokud chcete napodobovat pádové chování a předat řízení do jiné části přepínače, můžete použít goto
příkaz.
V kontextu výrazu můžete pomocí výrazu switch
vyhodnotit jeden výraz ze seznamu kandidátských výrazů na základě shody vzoru s výrazem.
Kryty případu
Vzor případu nemusí být dostatečně výrazný, aby určil podmínku pro spuštění oddílu přepínače. V takovém případě můžete použít ochranu případu. To je další podmínka, která musí být splněna společně s odpovídajícím vzorem. Ochrana případu musí být logickým výrazem. Za klíčové slovo, které se řídí vzorem, zadáte ochranu when
případu, jak ukazuje následující příklad:
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;
}
}
Předchozí příklad používá poziční vzory s vnořenými relačními vzory.
specifikace jazyka C#
Další informace najdete v následujících částech specifikace jazyka C#:
Další informace o vzorech najdete v části Vzory a porovnávání vzorů specifikace jazyka C#.