C#基本

[C#] 例外処理の書き方(try~catch~finally)

2021年12月21日

C#での例外処理の書き方です。

構文

構文

try
{
  //例外が発生する可能性がある処理
}
catch(<例外クラス>)
{
  //例外発生時の処理
}
finally
{
  //例外発生の有無に係わらず実行したい処理
}

catchは発生した例外毎に複数記述できます。

finallyは省略可です。

サンプル

例)try~catch~finallyを使ったサンプル


class TestClass
{
  static void Main(string[] args)
  {
    try
    {
      Console.WriteLine("処理を開始します。");
      int a = 100;
      int b = 0;
      double x = a / b;
    }
    catch(Exception ex)
    {
      Console.WriteLine("例外が発生しました。");
      Console.WriteLine(ex);
    }
    finally
    {
      Console.WriteLine("処理を終了します。");
    }
  }
}

結果

処理を開始します。
例外が発生しました。
System.DivideByZeroException: Attempted to divide by zero.
処理を終了します。

結果は分かりやすくするため一部省略しています。

標準例外クラス

標準の例外クラスには以下のようなものがあります。
独自例外を作成してcatchすることもできます。

例外クラス 意味
System.Exception すべての例外
System.OutOfMemoryException メモリ不足例外
System.InvalidCastException 型変換に失敗した
System.IndexOutOfRangeException 範囲外エラー
配列のインデックスを超えてアクセスしたなど
System.NullReferenceException Null参照した
System.DivideByZeroException ゼロ除算を行った
System.IO.IOException ファイル入出力などでエラーが発生した

Catchした例外を使用しない場合

Catchした例外を使用しない場合は、Catch句に変数名を省略することもできます。

例)Catch句の変数を省略したサンプル


try
{
  // 処理
}
catch(Exception)
{
  Console.WriteLine("例外が発生しました。");
}

この例ではCatch句に例外クラスのみ指定して、変数は省略しています。

備考

  • 基本的にJavaなどと同じ構文です。
  • 独自例外クラスは、System.Exceptionを継承させる必要があります。

関連記事

-C#基本
-