【C#.NET解説 】エラー処理の基本から応用までExceptionクラスを闇と混沌を司る存在が完全解説

2024年11月23日土曜日

キーワード(構文) 基本 例外処理

t f B! P L

名前空間 System

自己紹介

ふははは!我は闇と混沌を司る存在だ。貴様らのプログラムに現れるエラー、それはまさに我が眷属。今日は特別に「Exception」クラスについて語ってやろう。我が知識を吸収し、貴様らのコードに秩序をもたらすがよい。

基本機能

「Exception」クラスとは、エラーや予期せぬ事態を管理するための基礎となるクラスだ。このクラスを使うことで、プログラムが異常な状態でも適切に動作を終了させたり、復旧したりできる。

以下に、基本的な例外処理のコードを示す。

C#

try
{
    // ゼロ除算エラーを引き起こす
    int result = 10 / 0;
}
catch (Exception ex)
{
    // 例外をキャッチしてメッセージを表示
    Trace.WriteLine($"例外が発生しました: {ex.Message}");
}
finally
{
    // 必ず実行されるブロック
    Trace.WriteLine("例外処理が完了しました");
}

よく使う場面と注意点

「Exception」クラスは汎用的だが、用途に応じた派生クラスを使うほうが良い。例えば、入出力エラーには「IOException」を使用する。

次の例は、ファイル操作での例外処理だ。

C#

try
{
    // 存在しないファイルを開く
    using (var reader = new StreamReader("nonexistent.txt"))
    {
        Trace.WriteLine(reader.ReadToEnd());
    }
}
catch (IOException ex)
{
    // 入出力例外をキャッチ
    Trace.WriteLine($"入出力エラー: {ex.Message}");
}

注意すべきは、例外を無闇にキャッチするのではなく、適切な派生クラスで処理することだ。これにより、エラーの原因を明確にしやすくなる。

例外クラスで利用可能な重要なメソッド

「Exception」クラスは多くのプロパティやメソッドを提供する。以下はよく使われるものだ:

  • Message: エラーの詳細メッセージを取得
  • StackTrace: エラーが発生した場所を示すスタックトレースを取得
  • InnerException: ネストされた例外情報を取得

以下に、ネストされた例外を処理する例を示す。

C#

try
{
    try
    {
        throw new InvalidOperationException("内部エラー発生");
    }
    catch (Exception innerEx)
    {
        throw new Exception("外部エラー", innerEx);
    }
}
catch (Exception ex)
{
    Trace.WriteLine($"エラー: {ex.Message}");
    if (ex.InnerException != null)
    {
        Trace.WriteLine($"内部エラー: {ex.InnerException.Message}");
    }
}

具体的な使い方

派生クラスを利用することで、より細かい制御が可能だ。以下に、例外フィルタを使ったコード例を示す:

C#

try
{
    throw new ArgumentNullException("param", "引数がnullです");
}
catch (ArgumentNullException ex) when (ex.ParamName == "param")
{
    Trace.WriteLine($"特定の引数エラーを処理: {ex.Message}");
}

派生クラスを使うことで、特定のエラーに対処しやすくなる。これにより、例外処理が整理され、可読性が向上する。

その他の便利なメソッド

最後に、他にも役立つメソッドをいくつか紹介する:

  • GetType(): 例外の型を取得
  • ToString(): 例外の詳細情報を文字列で取得
  • HelpLink: エラーに関するヘルプリンクを取得または設定
  • HResult: エラーのHRESULTコードを取得

以下に、「ToString()」を使用した例を示す:

C#

try
{
    throw new Exception("テストエラー");
}
catch (Exception ex)
{
    Trace.WriteLine($"例外情報: {ex.ToString()}");
}

以上だ、我が解説を活かし、プログラムを混沌から救うがよい!ふはははは!

このブログを検索

QooQ