Seçim deyimleri - if
, else
ve switch
if
ve else
switch
deyimleri, bir ifadenin değerine göre birçok olası yoldan yürütülecek deyimleri seçer. deyimi, if
Boole ifadesinin değerine göre yürütülecek bir deyimi seçer. Boole ifadesini temel alan iki ayrı yol seçmek için deyimi if
ile else
birleştirilebilir. deyimi, switch
bir ifadeyle bir desen eşleşmesine göre yürütülecek bir deyim listesi seçer.
deyimi if
Deyim if
aşağıdaki iki biçimden biri olabilir:
if
Bölümü olan birelse
deyim, aşağıdaki örnekte gösterildiği gibi boole ifadesinin değerine göre yürütülecek iki deyimden birini seçer: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
Bölümü olmayan birelse
deyim, gövdesini yalnızca aşağıdaki örnekte gösterildiği gibi Boole ifadesi olarak değerlendirilirsetrue
yürütür: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}"); }
Aşağıdaki örnekte gösterildiği gibi birden çok koşulu denetlemek için deyimleri iç içe if
yerleştirebilirsiniz:
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}");
}
}
İfade bağlamında, bir Boole ifadesinin değerine göre iki ifadeden birini değerlendirmek için koşullu işleci ?:
kullanabilirsiniz.
deyimi switch
Deyimi, switch
aşağıdaki örnekte gösterildiği gibi, eşleşme ifadesiyle bir desen eşleşmesine göre yürütülecek bir deyim listesi seçer:
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;
}
}
Yukarıdaki örnekte deyimi switch
aşağıdaki desenleri kullanır:
- bir ifade sonucunu sabitle karşılaştırmak için ilişkisel desen (C# 9.0 ve sonraki sürümlerde kullanılabilir).
- Sabit desen: bir ifade sonucunun sabite eşit olup olmadığını test edin.
Önemli
deyimi tarafından switch
desteklenen desenler hakkında bilgi için bkz . Desenler.
Yukarıdaki örnekte de büyük/küçük harf gösterilmiştir default
. büyük default
/küçük harf, eşleşme ifadesi başka bir büyük/küçük harf deseni ile eşleşmediğinde yürütülecek deyimleri belirtir. Eşleşme ifadesi herhangi bir büyük/küçük harf deseni ile eşleşmiyorsa ve büyük/küçük harf yoksa default
denetim bir switch
deyimden geçer.
Deyimiswitch
, ilk switch bölümündedurum deseni eşleşme ifadesiyle eşleşen ve varsa büyük/küçük harf koruyucusu olarak değerlendirilen deyim listesini yürütürtrue
. Deyimi switch
, büyük/küçük harf desenlerini yukarıdan aşağıya doğru metin sırasına göre değerlendirir. Derleyici, bir switch
deyimi ulaşılamaz bir durum içerdiğinde bir hata oluşturur. Bu, zaten bir büyük harf tarafından işlenen veya deseni eşleşmesi imkansız olan bir durumdur.
Not
Olay, default
bir deyimin içinde herhangi bir switch
yerde görünebilir. Konumu ne olursa olsun, durum her zaman en sonda default
değerlendirilir ve yalnızca diğer tüm büyük/küçük harf desenlerinin eşleşmemiş olması durumunda (karşılaşılan durumlar goto default
dışında) değerlendirilir.
Aşağıdaki örnekte gösterildiği gibi, deyimin bir switch
bölümü için birden çok büyük/küçük harf deseni belirtebilirsiniz:
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;
}
}
Deyimin switch
içinde denetim, bir anahtar bölümünden diğerine geçemez. Bu bölümdeki örneklerde gösterildiği gibi, genellikle bir deyimin break
denetimini geçirmek için her switch bölümünün sonundaki deyimini switch
kullanırsınız. Deyimin denetimini geçirmek switch
için return ve throw deyimlerini de kullanabilirsiniz. Düşüş davranışını taklit etmek ve denetimi diğer switch bölümüne geçirmek için deyiminigoto
kullanabilirsiniz.
İfade bağlamında, bir ifadeyle eşleşme desenini switch
temel alan aday ifadeler listesinden tek bir ifadeyi değerlendirmek için ifadeyi kullanabilirsiniz.
Vaka korumaları
Durum deseni, switch bölümünün yürütülmesi için koşulu belirtecek kadar açıklayıcı olmayabilir. Böyle bir durumda, servis talebi koruyucusu kullanabilirsiniz. Bu, eşleşen bir desenle birlikte karşılanması gereken ek bir koşuldur. Büyük/küçük harf koruyucu bir Boole ifadesi olmalıdır. Aşağıdaki örnekte gösterildiği gibi, anahtar sözcüğünden when
sonra bir desen izleyen bir büyük/küçük harf koruyucusu belirtirsiniz:
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;
}
}
Yukarıdaki örnekte iç içe ilişkisel desenlere sahip konumsal desenler kullanılır.
C# dili belirtimi
Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:
Desen eşleştirme switch
deyimi hakkında daha fazla bilgi için aşağıdaki özellik teklifi notlarını inceleyin: