セージ の メモ書き

メモこそ命の恩人だ

C# - Exception クラス(よく使うクラス)

個人的によく使う例外クラス

  • 個人的に、よく使用するものをメモする。

引数

例外クラス 内容
ArgumentNullException 引数が null
ArgumentOutOfRangeException 引数が仕様の範囲外
FormatException 引数の書式が仕様と異なる
ArgumentException その他、引数が仕様と異なる

ファイル/フォルダー

例外クラス 内容
FileNotFoundException ファイルが無い
DirectoryNotFoundException フォルダーが無い

コレクション

例外クラス 内容
IndexOutOfRangeException 配列のインデックスが誤り
KeyNotFoundException コレクションに該当するキーが無い

その他処理

例外クラス 内容
InvalidOperationException 無効な処理
TimeoutException タイムアウト発生
NotSupportedException サポート対象外
NotImplementedException 未実装、開発中

上記の例外クラスの継承関係

https://docs.microsoft.com/ja-jp/dotnet/api/system.exception

  • Exception
    • SystemException
      • ArgumentException
        • ArgumentNullException
        • ArgumentOutOfRangeException
      • FormatException
      • IndexOutOfRangeException
      • InvalidOperationException
      • IOException
        • DirectoryNotFoundException
        • FileNotFoundException
      • KeyNotFoundException
      • NotImplementedException
      • NotSupportedException
      • TimeoutException

catch 句と継承関係

catch 句は継承関係の順に定義する

  • catch 句を複数定義する場合、派生クラスから記述すること。
  • 順序が逆の場合、ビルドエラーになる。
  • Exception クラスは最後に定義すること。
// 以下、OK
try
{
    // ...
}
catch (ArgumentNullException ex)
{
    // ...
}
catch (ArgumentException ex)
{
    // ...
}
// 以下、NG。
// 継承関係の派生側が下にあるため、ビルドエラーになる。
try
{
    // ...
}
catch (ArgumentException ex)
{
    // ...
}
catch (ArgumentNullException ex)
{
    // ...
}

catch 句は基底クラスを検知できる

try
{
    throw new ArgumentOutOfRangeException();
}
catch (ArgumentException ex)
{
    Debug.WriteLine(ex.GetType());
    // System.ArgumentOutOfRangeException
    
    // 基底クラスの catch 句で処理できたことを確認。
}



以上