Complete these tasks to reinforce what you learned in this module.
Diese Methode entscheidet richtig — aber die eigentliche Aufgabe steht ganz innen, und jedes else ist von seinem if durch den halben Rumpf getrennt:
``csharp
if (bestellung != null) {
if (bestellung.Positionen > 0) {
if (bestellung.Kunde != null) {
if (bestellung.Kunde.IstAktiv) { return "OK"; }
else return "Kunde gesperrt";
} else return "Kein Kunde";
} else return "Keine Positionen";
} else return "Keine Bestellung";
Schreibe Pruefe mit Guard Clauses neu: **jeder Sonderfall eine Zeile**, kein else, keine Verschachtelung. Das Verhalten muss exakt gleich bleiben — auch die Reihenfolge, in der geprüft wird.
Main` prüft fünf Bestellungen und gibt jede Antwort auf einer eigenen Zeile aus.
if (bestellung != null) { … } else return "Keine Bestellung"; wird if (bestellung == null) return "Keine Bestellung";. Die Reihenfolge der Prüfungen muss bleiben, sonst ändert sich die Antwort für eine Bestellung mit mehreren Mängeln.using System;
public sealed class Kunde
{
public Kunde(bool istAktiv) { IstAktiv = istAktiv; }
public bool IstAktiv { get; private set; }
}
public sealed class Bestellung
{
public Bestellung(int positionen, Kunde kunde)
{
Positionen = positionen;
Kunde = kunde;
}
public int Positionen { get; private set; }
public Kunde Kunde { get; private set; }
}
public static class Pruefung
{
public static string Pruefe(Bestellung bestellung)
{
// TODO: mit Guard Clauses, in dieser Reihenfolge:
// keine Bestellung -> "Keine Bestellung"
// keine Positionen -> "Keine Positionen"
// kein Kunde -> "Kein Kunde"
// Kunde inaktiv -> "Kunde gesperrt"
// sonst -> "OK"
return "";
}
}
class Program
{
static void Main()
{
var faelle = new Bestellung[]
{
null,
new Bestellung(0, new Kunde(true)),
new Bestellung(2, null),
new Bestellung(2, new Kunde(false)),
new Bestellung(2, new Kunde(true)),
};
foreach (var fall in faelle)
Console.WriteLine(Pruefung.Pruefe(fall));
}
}