Multiple Catch Blocks
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 25/66。
複数の catch ブロックを使用すると、各例外タイプごとに特定のコードで異なるタイプの例外を処理できます。
基本的な try ブロックから始めます:
try
{
int number = int.Parse("abc");
}
特定の例外用の catch ブロックを追加:
try
{
int number = int.Parse("abc");
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
異なる例外を処理するために複数の catch ブロックを追加できます:
try
{
int number = int.Parse("abc");
int result = a10 / number;
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Divide By Zero Exception: " + ex.Message);
}
最初に一致する catch ブロックが実行されます。catch ブロックを最も具体的な例外タイプから最も一般的な例外タイプへ順序付けしてください。
チャレンジ
簡単DivideNumbers という名前のメソッドを作成し、2つの string パラメータを受け取る:
numeratorStr:分子を表す文字列denominatorStr:分母を表す文字列
このメソッドは以下を行う:
- 両方の文字列を整数に解析しようとする
- 分子を分母で割ろうとする
- 結果を整数として返す
- FormatException を処理し、"Invalid format" を出力して 0 を返す
- DivideByZeroException を処理し、"Cannot divide by zero" を出力して 0 を返す
- その他の例外を一般的な catch ブロックで処理し、"An error occurred" を出力して 0 を返す
チートシート
複数の catch ブロックを使用すると、各例外タイプごとに特定のコードで異なるタイプの例外を処理できます。
特定の例外を使用した基本的な try-catch:
try
{
int number = int.Parse("abc");
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
異なる例外のための複数の catch ブロック:
try
{
int number = int.Parse("abc");
int result = 10 / number;
}
catch (FormatException ex)
{
Console.WriteLine("Format Exception: " + ex.Message);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Divide By Zero Exception: " + ex.Message);
}
最初に一致する catch ブロックが実行されます。catch ブロックを最も具体的な例外タイプから最も一般的な例外タイプへ順序付けしてください。
自分で試してみよう
using System;
public class Program
{
public static int DivideNumbers(string numeratorStr, string denominatorStr)
{
// ここにコードを書いてください
}
public static void Main(string[] args)
{
string numeratorStr = Console.ReadLine();
string denominatorStr = Console.ReadLine();
int result = DivideNumbers(numeratorStr, denominatorStr);
Console.WriteLine("Result: " + result);
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety