Kijelölési utasítások

Jótanács

Ez a cikk az Alapismeretek szakasz része azon fejlesztők számára, akik már legalább egy programozási nyelvet ismernek, és c#-t tanulnak. Ha még csak most ismerkedik a programozással, először az Első lépések oktatóanyagokkal kezdje. A teljes szintaxisért tekintse meg a nyelvi referencia kijelölési utasításait .

Más nyelvről jön? A C++, a Java és a JavaScript mind osztoznak a C örökségén, így ifelsea switch C#-ban is ugyanez olvasható. Az egyetlen említésre méltó különbség: a C# tiltja az átesést a nem üres switch esetek között, és minden case címke nemcsak konstansértéket, hanem egy mintát is tesztelhet. Ha Pythonból érkezel, a C#-beli if/else if/else a Pythonbeli if/elif/else megfelelője, és a C# mintaalapú switch eleme a Python match utasításához áll a legközelebb.

A kijelölési utasítások kiválasztják, hogy egy feltétel alapján melyik kódblokk fusson. A C# két lehetőséget biztosít: if (opcionális else) logikai érték elágaztatásához és switch egy érték több esethez való összehasonlításához. A logikai kifejezés minden olyan kifejezés, amelynek az értéke true vagy false, például a(z) temperature >= 25 összehasonlítás.

Elágazás ezzel: if és else

Egy if utasítás csak akkor futtatja a blokkot, ha logikai kifejezése .true Adjon hozzá egy blokkot else a feltétel falseteljesülésekor futó kód megadásához:

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");
}

A(z) if vagy else törzse egyetlen utasítás, például egy értékadás vagy egy metódushívás. A blokkutasítás önmagában egy olyan utasítás, amely nulla vagy több utasítást tartalmaz kapcsos zárójelekben ({ }).

Számos kódolási szabvány azt javasolja, hogy az ágtesteket kapcsos zárójelekbe zárja, még egyetlen utasításra is. A kapcsos zárójelek explicité teszik a hatókört. Ez megakadályozza a gyakori hibát: egy második sort ad hozzá később, amelyet feltételesen szeretne futtatni, de ehelyett feltétel nélkül fut. Csak a kapcsos zárójelek határozzák meg, hogy mely utasítások tartoznak az ághoz. A C# nem tekinti jelentőségtelinek az üres helyeket, ezért önmagában a behúzásnak sincs jelentősége. A kapcsos zárójelek egyetlen sor esetén is érvényesek: a blokk az az egyetlen utasítás, amelyet az ág végrehajt. Húzza be a kódot az olvashatóság érdekében, de a blokk meghatározásához a kapcsos zárójelekre hagyatkozzon.

Teszteljen több feltételt a(z) else if használatával

Ha kettőnél több elérési út közül szeretne választani, fűzze össze a feltételeket a else if használatával. A C# sorrendben értékeli ki az egyes állapotokat, és futtatja az első blokkot, amelynek a feltétele, truemajd kihagyja a többit. A végleges else kezeli az összes többi esetet:

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

A sorrend fontos egy láncban. Mivel az első egyező feltétel nyer, először a legspecifikusabb feltételeket helyezze el. Az előző példában a(z) score >= 80 ellenőrzése score >= 70 előtt biztosítja, hogy a 82-es pontszám a(z) "B" elemhez legyen hozzárendelve, ne pedig a(z) "C" elemhez.

Egy érték egyeztetése egy switch utasítással

Ha egyetlen értéket hasonlít össze számos különálló esethez, az switch utasítás jobban olvasható, mint egy hosszú else if lánc. A if-hoz hasonlóan a switch utasítás is egy elágazó utasítás: kiválasztja, melyik kód fusson. Minden case címke egy egyező értéket sorol fel, és minden case szakasz egy break utasítással végződik. Halmozza a címkéket, hogy egy közös törzset használjanak, és használja a default szakaszt azokhoz az értékekhez, amelyekhez egyik eset sem illeszkedik:

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;
}

A C-vel és a Javával ellentétben a C# nem engedi meg, hogy a végrehajtás egy nem üres case szakaszból automatikusan továbblépjen a következőbe. Minden kódot tartalmazó szakasznak egy break (vagy egy másik ugrási utasítással, például return vagy goto) kell végződnie. Ez a szabály megakadályozza az ilyen nyelvekben gyakori, véletlen továbblépésből adódó hibákat.

Minták tesztelése a(z) case és when elemekkel

A case címkék nem korlátozódnak állandó értékekre. Tesztelhet egy mintát, amely egy olyan szabály, amely az adatok alakját vagy értékét írja le. Egy relációs minta, például < 0 egyezik a nullánál kisebb értékkel. Adjon hozzá egy when feltételágat, amellyel megadhat egy további feltételt, amelynek szintén true teljesülnie kell ahhoz, hogy az eset illeszkedjen:

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;
}

A mintaalapú eseteket felülről lefelé értékeli a rendszer, így a konkrétabb minták az általánosabbakhoz tartoznak. A minták teljes katalógusát a mintaegyeztetés című témakörben talál.

Érték kijelölése kifejezéssel

Az if és switch az utasítások határozzák meg, hogy melyik kód fut. Ha inkább ki kell választania egy értéket, használjon egy kifejezést. Egy kifejezés értékre értékelődik ki, ezért mindenütt használható, ahol egy érték várható, például egy hozzárendelés jobb oldalán vagy egy metódus argumentumaként. A C# olyan kifejezésűrlapokat kínál, amelyek kiválasztanak egy értéket olyan alternatívákból, mint a feltételes operátor és a switch kifejezés.

Feltételes operátor ?:

A feltételes operátor ?: két érték közül választ egy logikai feltétel alapján.

Szintaxisát, rövidzárlati viselkedését és a helyetti if/elsekiválasztásával kapcsolatos útmutatást a Feltételes operátor ?:című témakörben talál.

switch kifejezés

Az switch kifejezés a switch utasítás kifejezésbeli megfelelője. Ahelyett, hogy az egyező esethez futtatja a kódot, egy értékre értékel. Ez tömörebb, mint a switch utasítás minden ágában értéket adni, és a fordító figyelmeztet, ha az ágak nem fednek le minden lehetséges bemenetet. A switch kifejezés a mintaegyeztetés alapvető része. Ha szeretné megtudni, mikor és hogyan használható, tekintse meg a minták illesztése és a switch kifejezés referenciáját.

Lásd még