黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』

try ~ catch

本記事は、Excel C# Script入門講座の1記事です。

try ~ catch

スクリプト内でエラーが発生した場合のプログラムの制御には、try ~ catch ステートメントを使用します。

try ~ catch ステートメントは、try ブロックと、それに続く 1 つ以上の catch 句で構成されます。catch句には例外処理を記載します。これにより、 例外が起こったときでもプログラムが異常な動作をしない堅牢なスクリプトを作ることが可能となります。

例えば以下のように使います。

object o2 = null;
try
{
    int i2 = (int)o2;   //例外の発生
}
catch (NullReferenceException e)  //発生する例外に合わせた例外クラスの指定
{
    //エラー処理
}

エラーには、大きく分けて実行時エラーと構文エラー(コンパイルエラー)とがあります。

実行時エラーとはシステムで処理できない動作を実行しようとした場合に発生するエラーです。C#(C# Script)では、実行時にエラーが発生すると、例外がスローされます。

構文エラーとは文法上の規則に違反した場合に発生するエラーで、プログラム実行前のコンパイル時に発生します。C# Scriptでは、構文エラーに関しては、実行前にエラーが表示されます。

tryブロックには、実行時エラーが発生する(例外がスローされる)可能性のあるコードを含ませます。このブロックは、例外がスローされるか、ブロックが正常に終了するまで実行されます。

catch 句は、引数なしで使用してすべての種類の例外をキャッチすることが可能ですが、そのようなコードは推奨されません。通常は、回復方法(例外が発生した場合の処理方法)が分かっている例外のみキャッチします。

try ~ finally

tryブロックでエラーが発生した場合でも、確実に実行したい処理がある場合には、finallyブロックを使用することができます。

finallyブロックは、たとえばtryブロック内で確保したリソースを確実に開放したい場合に利用することができます。

try
{
  //例外が投げられる可能性のあるコード
}
finally
{
  //例外発生の有無にかかわらず実行したいコード
  //リソースの開放などを行う
}