Menu
Coddy logo textTech

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 ブロックを最も具体的な例外タイプから最も一般的な例外タイプへ順序付けしてください。

challenge icon

チャレンジ

簡単

DivideNumbers という名前のメソッドを作成し、2つの string パラメータを受け取る:

  • numeratorStr:分子を表す文字列
  • denominatorStr:分母を表す文字列

このメソッドは以下を行う:

  1. 両方の文字列を整数に解析しようとする
  2. 分子を分母で割ろうとする
  3. 結果を整数として返す
  4. FormatException を処理し、"Invalid format" を出力して 0 を返す
  5. DivideByZeroException を処理し、"Cannot divide by zero" を出力して 0 を返す
  6. その他の例外を一般的な 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);
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン