演習 - 例外を作成してスローするためのチャレンジ アクティビティを完了する
このモジュールのコードチャレンジは、学習したことを補強し、続行する前に自信を持って得るのに役立ちます。
例外チャレンジを作成してスローする
この課題では、一連のメソッド呼び出しを使用してデータを処理するサンプル アプリケーションから始めます。 最上位レベルのステートメントは、ユーザー入力値の配列を作成し、 Workflow1という名前のメソッドを呼び出します。
Workflow1 は、配列をループ処理し、ユーザー入力値を Process1 という名前のメソッドに渡す高度なワークフローを表します。
Process1 は、ユーザー入力データを使用して値を計算します。
現在、 Process1 で問題またはエラーが発生すると、例外をスローするのではなく、問題を説明する文字列が返されます。 課題は、サンプル アプリケーションに例外処理を実装することです。
チャレンジを完了するには、次の手順に従います。
開始サンプル アプリケーションとして次のコードを使用します。
string[][] userEnteredValues = new string[][] { new string[] { "1", "2", "3"}, new string[] { "1", "two", "3"}, new string[] { "0", "1", "2"} }; string overallStatusMessage = ""; overallStatusMessage = Workflow1(userEnteredValues); if (overallStatusMessage == "operating procedure complete") { Console.WriteLine("'Workflow1' completed successfully."); } else { Console.WriteLine("An error occurred during 'Workflow1'."); Console.WriteLine(overallStatusMessage); } static string Workflow1(string[][] userEnteredValues) { string operationStatusMessage = "good"; string processStatusMessage = ""; foreach (string[] userEntries in userEnteredValues) { processStatusMessage = Process1(userEntries); if (processStatusMessage == "process complete") { Console.WriteLine("'Process1' completed successfully."); Console.WriteLine(); } else { Console.WriteLine("'Process1' encountered an issue, process aborted."); Console.WriteLine(processStatusMessage); Console.WriteLine(); operationStatusMessage = processStatusMessage; } } if (operationStatusMessage == "good") { operationStatusMessage = "operating procedure complete"; } return operationStatusMessage; } static string Process1(String[] userEntries) { string processStatus = "clean"; string returnMessage = ""; int valueEntered; foreach (string userValue in userEntries) { bool integerFormat = int.TryParse(userValue, out valueEntered); if (integerFormat == true) { if (valueEntered != 0) { checked { int calculatedValue = 4 / valueEntered; } } else { returnMessage = "Invalid data. User input values must be non-zero values."; processStatus = "error"; } } else { returnMessage = "Invalid data. User input values must be valid integers."; processStatus = "error"; } } if (processStatus == "clean") { returnMessage = "process complete"; } return returnMessage; }サンプル アプリケーションが次のメッセージをコンソールに出力することを確認します。
'Process1' completed successfully. 'Process1' encountered an issue, process aborted. Invalid data. User input values must be valid integers. 'Process1' encountered an issue, process aborted. Invalid data. User input values must be non-zero values. An error occurred during 'Workflow1'. Invalid data. User input values must be non-zero values.次の要件を使用してサンプル アプリケーションを更新します。
- すべてのメソッドは、
static stringメソッドからstatic voidメソッドに変換する必要があります。 -
Process1メソッドは、発生した問題の種類ごとに例外をスローする必要があります。 -
Workflow1メソッドは、FormatException例外をキャッチして処理する必要があります。 - 最上位レベルのステートメントは、
DivideByZeroException例外をキャッチして処理する必要があります。 - 例外の
Messageプロパティを使用して、問題をユーザーに通知する必要があります。
- すべてのメソッドは、
完成したソリューションでは、次のメッセージをコンソールに出力する必要があります。
'Process1' completed successfully. 'Process1' encountered an issue, process aborted. Invalid data. User input values must be valid integers. An error occurred during 'Workflow1'. Invalid data. User input values must be non-zero values.
がんばってください。