學習軌道
/
C#
C#
/
練習
/
德州的樂器
德州的樂器

德州的樂器

學習練習

簡介

例外篩選

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

準備好開始 德州的樂器 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。