when est le mot-clé qui permet de filtrer les exceptions. Il se place après l'instruction catch et peut prendre une expression booléenne contenant toutes les valeurs qui sont dans la portée à ce moment-là. Si l'expression est évaluée à vrai, le bloc associé à cette instruction catch est exécuté, sinon l'instruction catch suivante, s'il y en a une, est vérifiée.
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.
}
Une exception définie par l'utilisateur est toute classe définie dans ton code qui dérive de System.Exception. Elle est soumise à toutes les règles de l'héritage de classe, mais en plus le compilateur et l'environnement d'exécution du langage traitent ces classes d'une manière particulière, ce qui permet de lever et d'intercepter leurs instances en dehors du flux de contrôle normal, comme expliqué dans l'exercice exceptions.
Les exceptions définies par l'utilisateur servent souvent à transporter des informations supplémentaires, comme un message et d'autres données pertinentes, à mettre à la disposition des routines qui les interceptent.
Pendant que tu travailles chez Instruments of Texas, ta mission est de travailler sur une calculatrice expérimentale écrite en C#. Tu construis un banc de test pour vérifier un certain nombre de fonctions de la calculatrice, en commençant par la multiplication. Tu verras qu'une attention particulière est portée au cas où les deux opérandes de la multiplication sont négatifs.
La classe Calculator t'est fournie et ne doit pas être modifiée.
CalculationException
Complète la définition du constructeur de CalculationException, qui devra stocker (encapsuler) toute exception levée par la calculatrice ainsi que les opérandes en cours de traitement au moment où l'exception est levée.
Implémente la méthode CalculatorTestHarness.Multiply(), qui doit appeler la méthode Calculator.Multiply() de l'instance de Calculator passée au constructeur, en lui passant les valeurs entières x et y. Si un dépassement de capacité se produit dans la méthode Calculator.Multiply(), celle-ci lève une OverflowException. Cette exception doit être interceptée dans la méthode CalculatorTestHarness.Multiply() et encapsulée dans une CalculationException, et les valeurs x et y transmises doivent être stockées comme opérandes de l'exception. L'objet CalculationException nouvellement créé doit être levé. Tu peux ignorer la valeur renvoyée par la méthode Calculator.Multiply() si celle-ci réussit.
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
Implémente la méthode CalculatorTestHarness.TestMultiplication(), qui prend deux entiers et appelle la méthode CalculatorTestHarness.Multiply(). C'est "Multiply succeeded" qui est renvoyé.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"
Modifie la méthode CalculatorTestHarness.TestMultiplication() pour que "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" soit renvoyé si les deux arguments entiers sont négatifs (inférieurs à zéro).
L'espace réservé <INNER_EXCEPTION_MESSAGE> doit être remplacé par le message de l'exception interne de la CalculationException.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message
Modifie la méthode CalculatorTestHarness.TestMultiplication() pour que "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" soit renvoyé si au moins un des arguments entiers n'est pas négatif.
L'espace réservé <INNER_EXCEPTION_MESSAGE> doit être remplacé par le message de l'exception interne de la CalculationException.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.