EMZETT.
Login

Kurz: string? name = null; Console.WriteLine(name ?? “Gast”); // Ersatzwert bei null Console.WriteLine(name?.Length ?? 0); // sicherer Zugriff name ??= “Standard”; // nur zuweisen, wenn null Console.WriteLine(name);

Teil des Kurses C#

Kapitel 3 von 16 im Kurs C# (Abschnitt „Programmablauf“). Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Operatoren

GruppeOperatoren
Arithmetik+ - * / %, ++ --
Vergleich== != < > <= >=
Logik&& || ! (mit Kurzschluss), & | ^ (ohne)
Zuweisung= += -= *= /= %= ??=
Bedingunga ? b : c
Null?? (Ersatzwert), ?. (sicherer Zugriff), ??=
Bereich.., ^ (Indexe von hinten)
int a = 17, b = 5;
Console.WriteLine($"{a + b} {a / b} {a % b} {(double) a / b:F2}");
Console.WriteLine($"{a > b && b > 0} {a < b || b == 5} {!(a > b)}");
string status = a >= 18 ? "volljährig" : "minderjährig";
Console.WriteLine(status);
 
string? name = null;
Console.WriteLine(name ?? "Gast");                  // Ersatzwert bei null
Console.WriteLine(name?.Length ?? 0);               // sicherer Zugriff
name ??= "Standard";                                // nur zuweisen, wenn null
Console.WriteLine(name);
 
var z = new[] { 10, 20, 30, 40, 50 };
Console.WriteLine($"{z[^1]} {z[^2]} {string.Join(",", z[1..4])} {string.Join(",", z[..2])}");

Ausgabe:

22 3 2 3.40
True True False
minderjährig
Gast
0
Standard
50 40 20,30,40 10,20

if und switch

int punkte = 73;
if (punkte >= 90) Console.WriteLine("sehr gut");
else if (punkte >= 75) Console.WriteLine("gut");
else if (punkte >= 50) Console.WriteLine("bestanden");
else Console.WriteLine("nicht bestanden");
 
// switch-Ausdruck (modern): liefert einen Wert
string note = punkte switch
{
    >= 90 => "1",
    >= 75 => "2",
    >= 60 => "3",
    >= 50 => "4",
    _ => "5",                                       // _ = alles andere
};
Console.WriteLine(note);
 
int tag = 6;
string art = tag switch { 6 or 7 => "Wochenende", >= 1 and <= 5 => "Werktag", _ => "ungültig" };
Console.WriteLine(art);
 
switch (tag)                                        // klassisches switch
{
    case 1:
        Console.WriteLine("Montag");
        break;
    case 6:
    case 7:
        Console.WriteLine("Wochenende");
        break;
    default:
        Console.WriteLine("Mitte der Woche");
        break;
}

Ausgabe:

bestanden
3
Wochenende
Wochenende

Im klassischen switch braucht jeder Fall ein break. Ein stilles Durchfallen wie in C gibt es nicht.

Schleifen

for (int i = 1; i <= 5; i++) Console.Write(i + " ");
Console.WriteLine();
 
int n = 1;
while (n < 100) n *= 2;
Console.WriteLine(n);
 
int versuche = 0;
do { versuche++; } while (versuche < 3);
Console.WriteLine(versuche);
 
foreach (var farbe in new[] { "rot", "grün", "blau" }) Console.Write(farbe + " ");
Console.WriteLine();
 
foreach (var (schluessel, wert) in new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 })
    Console.Write($"{schluessel}={wert} ");
Console.WriteLine();
 
for (int i = 1; i <= 10; i++)
{
    if (i % 2 == 0) continue;                       // überspringen
    if (i > 7) break;                               // abbrechen
    Console.Write(i + " ");
}
Console.WriteLine();

Ausgabe:

1 2 3 4 5
128
3
rot grün blau
a=1 b=2
1 3 5 7

Klassiker

// FizzBuzz
for (int i = 1; i <= 15; i++)
    Console.Write((i % 15 == 0 ? "FizzBuzz" : i % 3 == 0 ? "Fizz" : i % 5 == 0 ? "Buzz" : i.ToString()) + " ");
Console.WriteLine();
 
// Primzahlen bis 30
for (int zahl = 2; zahl <= 30; zahl++)
{
    bool prim = true;
    for (int t = 2; t * t <= zahl; t++) if (zahl % t == 0) { prim = false; break; }
    if (prim) Console.Write(zahl + " ");
}
Console.WriteLine();
 
// Tabelle
for (int zeile = 1; zeile <= 3; zeile++)
{
    for (int spalte = 1; spalte <= 5; spalte++) Console.Write($"{zeile * spalte,4}");
    Console.WriteLine();
}

Ausgabe:

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
2 3 5 7 11 13 17 19 23 29
   1   2   3   4   5
   2   4   6   8  10
   3   6   9  12  15

Merke

  • ??, ?., ??= gehen mit null um; z[^1] und z[1..4] adressieren von hinten und Bereiche
  • switch-Ausdrücke mit => und Mustern (>= 90, or, and, _) sind kompakt und vollständig
  • foreach ist die Standardschleife über Sammlungen
  • break, continue wie in C; kein Durchfallen im switch

Übungsaufgabe

Schreibe einen switch-Ausdruck, der aus einer Monatsnummer die Zahl der Tage zurückgibt (Schaltjahr als zweiter Parameter).

Quiz zur Selbstkontrolle

?

  • Das letzte Element (richtig)
  • Das erste Element
  • Einen Fehler
  • Das vorletzte Element

Weiter im Kurs

Zurück: Variablen, Typen und Ausgabe

Weiter: Strings und Text

Alle Kapitel: C# im Überblick