Seçim ifadeleri

Tip

Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Programlamaya yeni başladıysanız ilk olarak Başlangıç öğreticileri ile başlayın. Söz diziminin tamamı için bkz. dil başvurusundaki seçim deyimleri .

Başka bir dilden mi geliyorsunuz? C++, Java ve JavaScript'in tümü C'nin mirasını paylaşır, bu nedenle if, elseve switch C# dilinde de aynı şeyi okur. Dikkate değer tek fark şudur: C#, boş olmayan switch durumları arasında bir durumdan diğerine doğrudan geçişe izin vermez ve her case etiketi yalnızca bir sabiti değil, bir deseni de sınayabilir. Python’dan geliyorsanız, C#'taki if/else if/else, if/elif/else karşılık gelir ve C#'taki desen tabanlı switch, Python’daki match ifadesine en yakındır.

Seçim deyimleri, bir koşula göre çalıştırılan kod bloğunu seçer. C#, bir Boole değeri üzerinde dallanmak için if (isteğe bağlı else ile) ve bir değeri çeşitli durumlarla karşılaştırmak için switch olmak üzere iki yapı sunar. Boole ifadesi, true veya false olarak değerlendirilen, temperature >= 25 karşılaştırması gibi herhangi bir ifadedir.

if ve else ile dallanma

Bir if deyimi, bloğunu yalnızca Boole ifadesi true olduğunda çalıştırır. Koşul else olduğunda çalışacak kodu belirtmek için bir false bloğu ekleyin:

int temperature = 28;

// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
    Console.WriteLine("Warm"); // => Warm
}
else
{
    Console.WriteLine("Cool");
}

Bir if veya else gövdesi, atama ya da yöntem çağrısı gibi tek bir deyimdir. Bir blok deyimi, sıfır veya daha fazla deyimi küme ayraçları içine alan tek bir deyimdir ({ }).

Birçok kodlama standardı, tek bir deyim için bile dal gövdelerini süslü parantez içine almanızı önerir. Ayraçlar kapsamı açık hale getirir. Yaygın bir hatayı önler: daha sonra koşullu olarak çalıştırmayı beklediğiniz ancak bunun yerine koşulsuz olarak çalışan ikinci bir satır ekleme. Hangi ifadelerin dala ait olduğunu yalnızca süslü parantezler belirler. C# boşluğu önemli olarak ele almaz, bu nedenle tek başına girintileme hiçbir zaman yapmaz. Süslü parantezler tek bir satırlık ifade için bile geçerlidir: blok, dalın çalıştırdığı tek deyimdir. Kodunuzu okunabilirlik için girintileyin, ancak bloğu tanımlamak için ayraçları kullanın.

else if ile çeşitli koşulları test edin

İkiden fazla yol arasından seçim yapmak için koşulları else if ile zincirleyin. C# her koşulu sırayla değerlendirir ve koşulu trueolan ilk bloğu çalıştırır ve gerisini atlar. Son bir else, geriye kalan tüm durumları ele alır:

int score = 82;

// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
    grade = "A";
}
else if (score >= 80)
{
    grade = "B";
}
else if (score >= 70)
{
    grade = "C";
}
else
{
    grade = "F";
}

Console.WriteLine(grade); // => B

Düzen bir zincirde önemlidir. İlk eşleşen koşul kazandığından, en özel koşulları önce koyun. Önceki örnekte, score >= 80 öğesinin score >= 70 öğesinden önce test edilmesi, 82 puanının "B" yerine "C" ile eşlenmesini sağlar.

Bir değeri switch deyimiyle eşleştirme

Tek bir değeri birçok ayrı durumla karşılaştırdığınızda, uzun bir switch zinciri yerine else if deyimi daha anlaşılırdır. gibi ifdeyimi switch bir dallanma deyimidir: çalıştırılacak kodu seçer. Her case etiket eşleştirecek bir değer listeler ve her case bölüm bir break deyimiyle biter. Etiketleri tek bir gövde paylaşacak şekilde bir araya getirin ve hiçbir durumun eşleşmediği değerler için default bölümünü kullanın:

DayOfWeek day = DayOfWeek.Saturday;

// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
    case DayOfWeek.Saturday:
    case DayOfWeek.Sunday:
        Console.WriteLine("Weekend"); // => Weekend
        break;
    default:
        Console.WriteLine("Weekday");
        break;
}

C ve Java aksine, C# yürütmenin belirsiz case bir bölümden diğerine geçmesine izin vermez. Kod içeren her bölümün, break ile (veya return ya da goto gibi başka bir atlama deyimiyle) bitmesi gerekir. Bu kural, bu dillerde yaygın olan yanlışlıkla oluşan fall-through hatalarını önler.

case ve when ile desenleri test edin

Etiket case sabit değerlerle sınırlı değildir. Verilerin şeklini veya değerini açıklayan bir kural olan deseni test edebilir. gibi < 0 bir ilişkisel desen sıfırdan küçük herhangi bir değerle eşleşir. Durumun eşleşmesi için ayrıca when olması gereken ek bir koşul bağlamak üzere bir true yan tümcesi ekleyin:

int measurement = 42;

// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
    case < 0:
        Console.WriteLine("Negative");
        break;
    case 0:
        Console.WriteLine("Zero");
        break;
    case > 0 when measurement % 2 == 0:
        Console.WriteLine("Positive and even"); // => Positive and even
        break;
    default:
        Console.WriteLine("Positive and odd");
        break;
}

Desen tabanlı durumlar yukarıdan aşağıya doğru değerlendirilir, bu nedenle daha özel desenler daha genel olanlardan önce gelir. Desenlerin tam kataloğu için bkz. desen eşleştirme.

İfade içeren bir değer seçme

if ve switch deyimleri, hangi kodun çalışacağını belirler. Bunun yerine bir değer seçmeniz gerektiğinde bir ifade kullanın. Bir ifade bir değere karşılık gelir, bu nedenle onu atamanın sağ tarafı veya metot argümanı gibi bir değerin beklendiği her yerde kullanabilirsiniz. C# koşullu işleç ve switch ifade gibi alternatiflerden bir değer seçen ifade formları sunar.

Koşullu işleç ?:

Koşullu işleç ?: Boole koşulunu temel alan iki değerden birini seçer.

Söz dizimi, kısa devre davranışı ve if/else yerine ne zaman seçileceğine ilişkin yönergeler için bkz.: Koşullu işleç ?:.

switch ifadesi

switch ifadesi, switch deyiminin ifade karşılığıdır. Eşleşen durum için kod çalıştırmak yerine, bir değere karşılık gelir. Bu, switch deyiminin her bir kolunda bir değer atamaya göre daha özlüdür ve kollar olası tüm girdileri kapsamadığında derleyici sizi uyarır. İfade switch , desen eşleştirmenin temel bir parçasıdır. Ne zaman ve nasıl kullanılacağını öğrenmek için desen eşleştirme ve switch ifadesi başvuru belgesine bakın.

Ayrıca bakınız