轨道
/
C#
C#
/
练习
/
Instruments of Texas
Instruments of Texas

Instruments of Texas

学习练习

简介

异常筛选

when是异常筛选中使用的关键字。它放在 catch 语句之后,可以接受一个布尔表达式,该表达式可以包含当时处于作用域内的任何值。如果表达式的值为 true,就会执行与该catch语句关联的代码块,否则会检查下一个catch语句(如果有的话)。

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.
}

用户自定义异常

用户自定义异常指的是你在代码中定义的、派生自 System.Exception 的任何类。它遵循类继承的所有规则,但除此之外,编译器和语言运行时还会对这类类做特殊处理,允许其实例在正常控制流之外被抛出和捕获,就像exceptions练习中讨论的那样。

用户自定义异常通常用于携带额外的信息,例如一条消息和其他相关数据,以便捕获它的例程能够获取这些信息。

说明

在 Instruments of Texas 工作期间,你的任务是开发一台用 C# 编写的实验性计算器。你要构建一个测试框架,用来验证一系列计算器功能,先从乘法开始。你会发现,当乘法的两个操作数都为负数时,需要特别留意。

我们已经为你提供了Calculator类,请不要修改它。

1. 完善用户定义的异常CalculationException的定义

请完善CalculationException的构造函数,它需要存储(包装)计算器抛出的任何异常,以及在异常抛出时正在处理的操作数。

2. 处理计算器中的溢出情况,并向调用方提供更详细的信息

实现CalculatorTestHarness.Multiply()方法:它应当调用传给构造函数的Calculator实例的Calculator.Multiply()方法,并传入整数 x 和 y。如果Calculator.Multiply()方法中发生溢出,就会抛出OverflowException。这个异常应当在CalculatorTestHarness.Multiply()方法中被捕获,包装成CalculationException,并把传递的 x 和 y 值存储为该异常的操作数。然后抛出新建的CalculationException对象。如果调用成功,可以忽略Calculator.Multiply()方法返回的值。

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. 用有效输入测试乘法运算

实现CalculatorTestHarness.TestMultiplication()方法,它接收两个整数并调用CalculatorTestHarness.Multiply()方法。此时返回"Multiply succeeded"。

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

4. 用负数输入测试乘法运算

修改CalculatorTestHarness.TestMultiplication()方法,使两个整数实参都为负数(小于零)时返回"Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>"。

其中<INNER_EXCEPTION_MESSAGE>占位符应替换为CalculationException内部异常的消息。

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

5. 用正数输入测试乘法运算

修改CalculatorTestHarness.TestMultiplication()方法,使至少有一个整数实参不是负数时返回"Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>"。

其中<INNER_EXCEPTION_MESSAGE>占位符应替换为CalculationException内部异常的消息。

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C# Exercism

准备好开始 Instruments of Texas 了吗?

注册 Exercism,借助 62 个概念178 个练习 和真人导师指导,学习并掌握 C#,全部免费。