when es la palabra clave para filtrar excepciones. Se coloca después de la sentencia catch y puede tomar una expresión Boolean que contenga cualquier valor que esté en el ámbito en ese momento. Si la expresión se evalúa como true, se ejecuta el bloque asociado a esa sentencia catch; de lo contrario, se revisa la siguiente sentencia catch, si la hay.
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.
}
Una excepción definida por el usuario es cualquier clase definida en tu código que derive de System.Exception. Está sujeta a todas las reglas de la herencia de clases, pero además el compilador y el entorno de ejecución del lenguaje tratan esas clases de una manera especial que permite lanzar y capturar sus instancias fuera del flujo de control normal, como se explica en el ejercicio exceptions.
Las excepciones definidas por el usuario se usan a menudo para transportar información adicional, como un mensaje y otros datos relevantes, que quede disponible para las rutinas que capturan la excepción.
Mientras trabajas en Instruments of Texas, tienes la tarea de trabajar en una calculadora experimental escrita en C#. Estás construyendo un arnés de pruebas para verificar varias funciones de la calculadora, empezando por la multiplicación. Verás que hay un interés especial cuando los dos operandos de la multiplicación son negativos.
La clase Calculator ya se te ha proporcionado y no debes modificarla.
CalculationException
Completa la definición del constructor de CalculationException, que deberá almacenar (envolver) cualquier excepción lanzada por la calculadora, así como los operandos que se están procesando en el momento en que se lanza la excepción.
Implementa el método CalculatorTestHarness.Multiply(), que debe llamar al método Calculator.Multiply() de la instancia de Calculator que se pasó al constructor, pasando los valores enteros x e y. Si ocurre un desbordamiento en el método Calculator.Multiply(), este lanzará una OverflowException. Esta excepción debe capturarse en el método CalculatorTestHarness.Multiply() y envolverse en una CalculationException, y los valores x e y que se están pasando deben almacenarse como los operandos de la excepción. El objeto CalculationException recién creado debe lanzarse. Puedes ignorar el valor que devuelve el método Calculator.Multiply() si tiene éxito.
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
Implementa el método CalculatorTestHarness.TestMultiplication(), que recibe dos enteros y llama al método CalculatorTestHarness.Multiply(). Se devuelve "Multiply succeeded".
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"
Modifica el método CalculatorTestHarness.TestMultiplication() para que se devuelva "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" si ambos argumentos enteros son negativos (menores que cero).
El marcador <INNER_EXCEPTION_MESSAGE> debe reemplazarse con el mensaje de la excepción interna de CalculationException.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message
Modifica el método CalculatorTestHarness.TestMultiplication() para que se devuelva "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" si al menos uno de los argumentos enteros no es negativo.
El marcador <INNER_EXCEPTION_MESSAGE> debe reemplazarse con el mensaje de la excepción interna de CalculationException.
var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.