A kivételek szűrésének kulcsszava a when. A catch utasítás után áll, és olyan Boolean-kifejezést fogadhat el, amelyben bármilyen, éppen hatókörben lévő érték szerepelhet. Ha a kifejezés értéke igaz, akkor a catch utasításhoz tartozó blokk hajtódik végre, ellenkező esetben pedig a következő catch utasítás kerül sorra, ha van ilyen.
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.
}
A felhasználó által definiált kivétel minden olyan osztály, amelyet a kódodban definiálsz, és amely a System.Exception-ből származik. Az osztályöröklés minden szabálya vonatkozik rá, emellett azonban a fordító és a nyelv futtatókörnyezete különleges módon kezeli az ilyen osztályokat: lehetővé teszi, hogy a példányaikat a normál vezérlési folyamon kívül dobjuk és elkapjuk, ahogy arról az exceptions feladatban szó volt.
A felhasználó által definiált kivételeket gyakran arra használjuk, hogy további információt, például üzenetet és más releváns adatot adjunk át az elkapó rutinoknak.
Miközben az Instruments of Texas-nál dolgozol, az a feladatod, hogy egy C#-ban írt kísérleti számológépen dolgozz. Egy tesztkörnyezetet építesz, amellyel a számológép számos funkcióját ellenőrzöd, kezdve a szorzással. Meglátod majd, hogy különös figyelmet igényel az az eset, amikor a szorzás két operandusa is negatív.
A Calculator osztályt biztosítottuk neked, és nem szabad módosítanod.
CalculationException kivétel definíciójátEgészítsd ki a CalculationException konstruktorának definícióját, amelynek el kell tárolnia (be kell csomagolnia) a számológép által dobott kivételt, valamint azokat az operandusokat, amelyek feldolgozása éppen folyt a kivétel dobásának pillanatában.
Valósítsd meg a CalculatorTestHarness.Multiply() metódust, amelynek meg kell hívnia a konstruktornak átadott Calculator példány Calculator.Multiply() metódusát, átadva neki az x és y egész értékeket. Ha a Calculator.Multiply() metódusban túlcsordulás történik, az OverflowException kivételt dob. Ezt a kivételt a CalculatorTestHarness.Multiply() metódusban kell elkapni, és be kell csomagolni egy CalculationException kivételbe, valamint az átadott x és y értékeket a kivétel operandusaiként kell eltárolni. Az újonnan létrehozott CalculationException objektumot kell dobni. A Calculator.Multiply() metódus visszatérési értékét figyelmen kívül hagyhatod, ha a hívás sikeres.
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
Valósítsd meg a CalculatorTestHarness.TestMultiplication() metódust, amely két egész számot vesz át, és meghívja a CalculatorTestHarness.Multiply() metódust. Ekkor a "Multiply succeeded" érték adódik vissza.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"
Módosítsd a CalculatorTestHarness.TestMultiplication() metódust úgy, hogy a "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" érték adódjon vissza, ha mindkét egész argumentum negatív (nullánál kisebb).
A <INNER_EXCEPTION_MESSAGE> helyőrzőt a CalculationException belső kivételének üzenetére kell cserélni.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message
Módosítsd a CalculatorTestHarness.TestMultiplication() metódust úgy, hogy a "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" érték adódjon vissza, ha az egész argumentumok közül legalább az egyik nem negatív.
A <INNER_EXCEPTION_MESSAGE> helyőrzőt a CalculationException belső kivételének üzenetére kell cserélni.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.