
今回は、 C# の例外処理についてまとめていこうと思います。例外処理は、想定外のエラーが発生したときに、プログラムが強制終了しないように、
処理を導くことができます。また、エラーが発生したときに、ユーザにどのようなエラーが発生したのかを知らせたり、対応方法を促したりすることができます。
それでは、使い方を見ていきましょう。
try-catch 例外処理の書き方
C#の場合、下記のように例外処理を記載することができます。
try
{
処理内容
}catch (Exception ex){
例外処理
}
tryで囲まれている処理で、エラーが発生した場合、catchに処理が飛ばされます。
その時、エラーの内容が「Exceltion型 ex」に内容が格納されます。
処理によって、メッセージボックスで表示するなどエラー時の処理を記載していきましょう。
例を見てみましょう。
try
{
int i = 0;
int a = 10;
int b = 0;
i = a / b;
}catch (Exception ex)
{
MessageBox.Show("0除算エラー:分母に0を指定することはできません。")
}
結果
0除算をが発生したので、catchに処理が飛ばされ、メッセージボックスが表示されたと思います。
メッセージボックスだけでなく、catchの中でなんでもできるので、その時のプログラムにあわせて、例外処理を作っていきましょう。
try-catch-finally 必ず実行する
先ほどtry-catchの例を記載しましたが、try-catch-finallyというものもあります。
finallyとは、正常処理であっても、異常処理であっても、最後に必ず実行される処理のことです。
try
{
処理内容
}
catch
{
エラー時処理内容
}
finally
{
処理内容
}
先ほどの例に、finallyを追加してみましょう。
try
{
int i = 0;
int a = 10;
int b = 0;
i = a / b;
}
catch
{
MessageBox.Show("0除算エラー:分母に0を指定することはできません");
}
finally
{
MessageBox.Show("finally処理 必ず処理を通る");
}
catchの処理で、メッセージが表示された後に、finallyの処理を行います。
このように、finallyでは、正常処理の場合も異常処理の場合も最後に必ず処理が行われます。
finallyは、メモリの解放をしたい時などに使用することが多いです。
throw 例外をスローする
次にthrowの使い方を紹介しておきます。
throwをすることで任意のタイミングで例外を発生させることができます。
throw new 例外の型;
先ほどの例で、もし b=0の場合は、throwを発生させる処理を追加してみました。
throw new Exception();によりエラーが発生して、catchに飛ばされます。
try
{
int i = 0;
int a = 10;
int b = 0;
if (b == 0)
{
throw new Exception();
}
i = a / b;
}
catch
{
MessageBox.Show("0除算エラー:分母に0を指定することはできません");
}
throw 再スロー
またcatchの中でthrowを行う、再スローというのもあります。
これは、関数などでエラーが発生した時に、呼び出し元に処理を返すことができます。
private void FrmTry_Load(object sender, EventArgs e)
{
try
{
int a = 10;
int b = 0;
warizan(a, b);
}
catch
{
MessageBox.Show("0除算エラー:分母に0を指定することはできません");
}
}
private int warizan(int aa,int bb)
{
try
{
int c = aa / bb;
return c;
}
catch
{
throw;
}
}
解説
8行目:warizan関数が呼び出される
20行目:でエラー発生
25行目:catchのthrowに処理が飛び、この後呼び出し元のcatch(12行目)へ処理がとばされる。
これがthrowの使い方になります。特に再スローはよく使用するので、覚えておきましょう。
まとめ
プログラムを作るうえで例外処理は非常に重要なのです。
try-catch-finallyとthrowの使い方をしっかりと理解していきましょう。