例外エラーのシンプルなサンプル

例外エラーの対応

次のようなキーボード入力でテストができます

  • a 英文字を入力(整数にキャストできません)
  • 0 (ゼロ)を入力 (0で除算できません)
  • 1や2といった整数 (正常に処理されます)

例外エラーで強制終了してしまうコード

次のコードは例外エラー(アプリが落ちる)になります

while (true)
{
    int a = int.Parse(Console.ReadLine());

    Console.WriteLine(10 / a);
}

例外エラーを処理したコード

例外エラーを検出し、その内容(メッセージ)を表示します

while (true)
{
    try
    {
        int a = int.Parse(Console.ReadLine());
        Console.WriteLine(10 / a);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}

実用的なエラーの処理

例外エラーに頼るのではなく、if文で正常に処理するのが推奨されるコードになります

while (true)
{
    // もし入力された文字列が整数に変換できれば、変数aにその値が代入されます
    // 条件式の戻り値も同時にtrueになりブロック内が実行されます
    if (int.TryParse(Console.ReadLine(), out int a))
    {
        Console.WriteLine(10 / a);
    }
}

usingキーワードを使った後処理

ファイルのオープン処理がなされた後、ファイルの内容が読み取られます
usingキーワードでブロックを作ることでブロック処理終了時、自動的に後処理(ファイルのクローズ処理)が行われます

try
{
    using (var file = new StreamReader("abc.txt"))
    {
        // ファイルから1行読み取って変数lineに代入します
        string line = file.ReadLine();
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    Console.WriteLine("正常に例外エラー処理されました");
}

自作コードで例外エラーを敢えて(あえて)発生させ、処理を呼び出し先に委ねる(ゆだねる)

通常、このようなコードを作成することは希ですが、自分でライブラリを作ったり、クリティカルなメッセージを発信したい場合などに活用します

try
{
    // 例外エラーが発生する可能性があるメソッドを呼び出す
    Test();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

void Test()
{
    // 何らかの条件でエラーを発生させる(if文等で判定します)
    throw new ArgumentException("エラーを起こしました");
}

C#,学習

Posted by hidepon