C#に標準的に用意されてる例外の紹介です。
この辺の例外は事象を判断するのに便利なので、覚えておいたほうがお得ですよ。
ここではC#の例外処理について学びます。すでに少しだけ触れてますが、これは実行時エラーへの対策となります。ただ、例外処理もクラスの知識を必要とします。そのため60%くらいの解説になりますが、今はここまでいいと思ってます。 例外 (Exception) C#では実行時に発生するエラーを例外と言います。僕が知ってる他の言語も大半が同じだった気がします。この例外とは、特定の条件において処理を完了できない問題が起きると発生し、その例外を誰もcatch(キャッチ)しないとプログラムが強制終了し...
今回はC#の例外処理について知識を深めます。残念ながら前回の内容は実用レベルだと不十分で、本格的なプログラムを作る場合は知識が足りません。 例外(Exception) 最初におさらいです。C#では実行時に発生するエラーを例外と言います。そして、この例外を誰もcatch(キャッチ)しない場合にプログラムが強制終了します。 また、この例外処理ですが、一般的に重い処理(コストが高いと言う)に分類されます。つまりは極論になりますが、例外処理で対策するよりも事前の分岐処理で逃げた...
公式ドキュメント
実はC#の公式に例外に関するドキュメントがあります。
https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/using-standard-exception-types
ここを読むとException型あたりは任意発生させるなって書いてあります。
つまり使っちゃ駄目なんですか?
いや、別にいいんじゃね。ガチガチにルール守ると手間も増えるし。
System 名前空間
汎用的に発生する例外です。1番よく見る系の例外が定義されてます。
Exception | 例外の頂点。何系に属するのか分からないので任意発生は良くないと言われている。 |
ApplicationException | ほぼExceptionと同じ。これも任意発生は良くないらしい。 |
NullReferenceException | null参照が発生した。 |
FormatException | フォーマットが適切ではない。 |
OverflowException | オーバーフローが発生した。 |
DivideByZeroException | いわゆる0除算が発生した。 |
TimeoutException | タイムアウトが発生した。 |
StackOverflowException | スタックオーバーフローが発生した。 |
OutOfMemoryException | メモリ不足が発生した。 |
AccessViolationException | 保護されたメモリ領域にアクセスすると発生する。 |
ObjectDisposedException | 破棄済みのオブジェクトが利用された。 |
IndexOutOfRangeException | アクセス範囲外のインデックスを参照した。 |
InvalidOperationException | 無効な操作が発生した。 |
RankException | 配列の次元数が適切ではない。 |
ArgumentException | 引数が適切ではない(nullや有効範囲外なら後述を利用する)。 |
ArgumentNullException | 引数がnullです。 |
ArgumentOutOfRangeException | 引数が有効範囲外です。 |
NotImplementedException | メソッド等が実装されてません。 |
NotSupportedException | メソッド等でサポート外の操作が発生した。 |
PlatformNotSupportedException | プラットフォームでサポート外の操作が発生した。 |
あんまり見ないのあるけど、C#の公式で紹介されてたので載せました。
System.IO 名前空間
ディレクトリやファイルの操作で発生する例外です。
DriveNotFoundException | 指定したドライブが存在しない。 |
DirectoryNotFoundException | 指定したディレクトリが存在しない。 |
FileNotFoundException | 指定したファイルが存在しない。 |
PathTooLongException | 指定したパスが長すぎる。 |
System.Collections.Generic 名前空間
コレクション操作時に発生する例外です。
KeyNotFoundException | アクセスするためのキーが存在しない。 |
あとがき
可能な限り独自の例外は作らず、.NETに定義済みの例外を使うほうが、他の開発者も理解しやすいメリットがあります。
特にSystem名前空間に存在する例外は汎用利用が前提なので、この中から選ぶと独自例外を作る手間も減ります。
◆ C#に関する学習コンテンツ
この記事は参考になりましたか?
コメント