Tracks
/
C#
C#
/
Übungen
/
Instruments of Texas
Instruments of Texas

Instruments of Texas

Lernübung

Einführung

Ausnahmen filtern

when ist das Schlüsselwort zum Filtern von Ausnahmen. Es steht nach der catch-Anweisung und kann einen booleschen Ausdruck annehmen, der alle Werte enthält, die zu diesem Zeitpunkt im Gültigkeitsbereich liegen. Ergibt der Ausdruck wahr, wird der Block ausgeführt, der zu dieser catch-Anweisung gehört. Andernfalls wird die nächste catch-Anweisung geprüft, falls es eine gibt.

try
{
    // do stuff
}
catch (Exception ex) when (ex.Message != "")
{
    // output the message when it is not empty
}
catch (Exception ex)
{
    // show stack trace or something.
}

Benutzerdefinierte Ausnahmen

Eine benutzerdefinierte Ausnahme ist jede Klasse, die in deinem Code definiert und von System.Exception abgeleitet ist. Für sie gelten alle Regeln der Klassenvererbung. Zusätzlich behandeln der Compiler und die Laufzeitumgebung solche Klassen aber auf besondere Weise: Ihre Instanzen können, wie in der Übung exceptions besprochen, außerhalb des normalen Kontrollflusses ausgelöst und abgefangen werden.

Benutzerdefinierte Ausnahmen werden oft genutzt, um zusätzliche Informationen wie eine Nachricht und andere relevante Daten an die abfangenden Routinen weiterzugeben.

Anleitung

Während du bei Instruments of Texas arbeitest, hast du die Aufgabe, an einem experimentellen Taschenrechner zu arbeiten, der in C# geschrieben ist. Du baust eine Testumgebung, um eine Reihe von Taschenrechnerfunktionen zu überprüfen, beginnend mit der Multiplikation. Du wirst feststellen, dass negative Operanden bei der Multiplikation besonders heikel sind.

Die Klasse Calculator wurde dir bereits zur Verfügung gestellt und sollte nicht verändert werden.

1. Vervollständige die Definition der benutzerdefinierten Exception CalculationException

Vervollständige die Definition des Konstruktors von CalculationException. Er muss jede Exception, die der Taschenrechner auslöst, speichern (umschließen) sowie die Operanden, die zu dem Zeitpunkt verarbeitet werden, an dem die Exception ausgelöst wird.

2. Behandle Überlaufbedingungen im Taschenrechner und liefere dem Aufrufer erweiterte Informationen

Implementiere die Methode CalculatorTestHarness.Multiply(), die die Methode Calculator.Multiply() der Calculator-Instanz aufrufen soll, die dem Konstruktor übergeben wurde, und dabei die ganzzahligen Werte x und y übergibt. Wenn in der Methode Calculator.Multiply() ein Überlauf auftritt, löst sie eine OverflowException aus. Diese Exception sollte in der Methode CalculatorTestHarness.Multiply() abgefangen und in eine CalculationException verpackt werden. Die übergebenen Werte x und y sollten als Operanden der Exception gespeichert werden. Das neu erstellte CalculationException-Objekt sollte ausgelöst werden. Den Rückgabewert der Methode Calculator.Multiply() kannst du ignorieren, wenn sie erfolgreich ist.

var cth = new CalculatorTestHarness(new Calculator());
cth.Multiply(Int32.MaxValue, Int32.MaxValue);
// => throws an instance of CalculationException

var cth2 = new CalculatorTestHarness(new Calculator());
cth2.Multiply(3, 2);
// => silently exits

3. Teste die Multiplikation mit gültigen Eingabewerten

Implementiere die Methode CalculatorTestHarness.TestMultiplication(), die zwei Ganzzahlen entgegennimmt und die Methode CalculatorTestHarness.Multiply() aufruft. "Multiply succeeded" wird zurückgegeben.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"

4. Teste die Multiplikation mit negativen Eingabewerten

Ändere die Methode CalculatorTestHarness.TestMultiplication() so, dass "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" zurückgegeben wird, wenn beide ganzzahligen Argumente negativ sind (kleiner als null).

Der Platzhalter <INNER_EXCEPTION_MESSAGE> sollte durch die Nachricht der inneren Exception der CalculationException ersetzt werden.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message

5. Teste die Multiplikation mit positiven Eingabewerten

Ändere die Methode CalculatorTestHarness.TestMultiplication() so, dass "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" zurückgegeben wird, wenn mindestens eines der ganzzahligen Argumente nicht negativ ist.

Der Platzhalter <INNER_EXCEPTION_MESSAGE> sollte durch die Nachricht der inneren Exception der CalculationException ersetzt werden.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
C# Exercism

Bereit, mit Instruments of Texas zu starten?

Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.