C# 例外処理
例外処理に関するサンプルです。
例外をキャッチする(try ~ catch ~ finally)
例外をキャッチするには、try ~ catchで囲います。
finallyは例外の発生有無に係わらず行いたい処理を記述します。
- 例)try ~ catch ~ finallyのコーディング
-
try { // 例外が発生する可能性がある処理(ここでは強制的に例外を発生させています) int i = int.Parse("ABC"); } catch (Exception ex) { // 例外発生時に行いたい処理 Console.WriteLine(ex); } finally { // 例外発生有無に係らず実行される処理 Console.WriteLine("(´・ω・`)<ここは必ず表示されます。"); }
- 【結果】
- 型 'System.FormatException' の初回例外が 発生しました System.FormatException: 入力文字列の形式が正しくありません。 場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 場所 System.Int32.Parse(String s) (´・ω・`)<ここは必ず表示されます。
例外の種類
主要な例外にはこのようなものがあります。
例外 | 意味 |
---|---|
Exception | 全ての例外の基底クラス |
NullReferenceException | Null参照をした |
DivideByZeroException | 0除算をした |
IndexOutOfRangeException | 配列やリストのインデックスの範囲を超えた参照をした |
FormatException | フォーマット変換エラー |
InvalidCastException | キャストできない型へキャストしようとした |
ArgumentNullException | Nullを許さない引数にNullが渡された |
ArgumentOutOfRangeException | |
ArgumentException | |
UnauthorizedAccessException | アクセス権限が無い |
例外 | 意味 |
---|---|
IOException | I/Oエラーが発生 |
FileNotFoundException | ファイルが見つからない |
DirectoryNotFoundException | ディレクトリが見つからない |
PathTooLongException | ファイル名が長すぎる |
例外を投げる(throw)
例外を強制的に発生させて、呼び出し元へ投げることもできます。
- 例)Exceptionを発生させて呼び出し元へ投げるメソッド
-
public void ThrowEx() { throw new Exception(); }
自作例外クラスを作る
自作の例外を発生させることもできます。
自作の例外は、System.Exceptionクラスを継承させればOKです。
- (自作例外クラス)
-
using System; class HogeException : Exception { public HogeException(string msg) { Console.WriteLine(msg); } }
- (自作例外を発生させる)
-
throw new HogeException("例外発生!");
- 【結果】
- 例外発生!