Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Příkazy výběru -
if-else Příkazy ifa 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
ifselsečá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
ifbezelsečá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 switch 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. 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říkazu switch . 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.
Důležité
Každý oddíl přepínače musí končit tečkou breaknebo returngoto . Při přechodu z jedné části přepínače na další se vygeneruje chyba kompilátoru. Na stejný oddíl přepínače, jako case < 0: v příkladu výše, se ale dá použít více popisků přepínačů. Tato záměrná volba návrhu umožňuje stručné zpracování více případů, které sdílejí stejnou nebo vzájemně závislá logiku.
V kontextu výrazu můžete pomocí výrazuswitch vyhodnotit jeden výraz ze seznamu kandidátských výrazů na základě shody vzoru s výrazem.
Důležité
Rozdíly mezi výrazem switch a příkazem switch:
- příkaz switch slouží k řízení toku provádění v bloku kódu.
- výraz switch se obvykle používá v kontextech vrácení hodnoty a přiřazení hodnoty, často jako členové typu výrazu.
- Oddíl velká písmena výrazu switch nemůže být prázdný, příkaz switch může.
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#.