try/catch を使用して例外を処理する方法

try-catch ブロックの目的は、作業コードによって生成された例外をキャッチし、処理することです。 例外によっては、catch ブロックで処理され、例外を再スローせずに問題を解決できるものもありますが、多くの場合、適切な例外が確実にスローされるようにする必要があります。

この例の IndexOutOfRangeException は最も適切な例外というわけではありません。呼び出し元から index 引数が渡されてエラーが発生しているため、より適切なメソッドは ArgumentOutOfRangeException になります。

static int GetInt(int[] array, int index)
{
    try
    {
        return array[index];
    }
    catch (IndexOutOfRangeException e)  // CS0168
    {
        Console.WriteLine(e.Message);
        // Set IndexOutOfRangeException to the new exception's InnerException.
        throw new ArgumentOutOfRangeException("index parameter is out of range.", e);
    }
}

コメント

例外を発生させるコードは try ブロックに囲まれています。 IndexOutOfRangeException が発生した場合にこれを処理するための catch ステートメントが、すぐ後に追加されています。 catch ブロックは IndexOutOfRangeException を処理し、代わりにより適切な ArgumentOutOfRangeException をスローします。 呼び出し元にできるだけ多くの情報を提供するため、元の例外を新しい例外の InnerException として指定することを検討してください。 InnerException プロパティは読み取り専用であるため、新しい例外のコンストラクターで割り当てる必要があります。