エラーと例外処理 (Visual C# Express)
更新 : 2007 年 11 月
C# プログラムの実行中に何らかの問題が生じると、例外が発生します。例外により、プログラムの現在のフローが停止します。対処を施さないと、プログラムの実行が停止します。例外の原因として、プログラムのバグ (数値をゼロで除算する操作など) や、予期しない入力 (ユーザーが存在しないファイルを選択した場合など) が考えられます。プログラマは、プログラムがクラッシュして停止することなく、これらの問題に対応できるようにする必要があります。
C# には、プログラムが例外を検出して処理し、継続して実行できるようにするためのキーワード (try、catch、および finally) が用意されています。これらのキーワードは、アプリケーションの信頼性を高めるのに役立ちます。
try と catch
try キーワードと catch キーワードを一緒に使うことはできません。try を使用して、例外の発生が考えられるコード ブロックを囲み、catch を使用して、例外発生時に実行されるコードを記述します。この例では、計算によってゼロ除算の例外が発生し、この例外がキャッチされます。try ブロックおよび catch ブロックを使用しないと、このプログラムは失敗します。
class ProgramTryCatch
{
static void Main()
{
int x=0, y=0;
try
{
x = 10 / y;
}
catch (System.DivideByZeroException)
{
System.Console.WriteLine("There was an attempt to divide by zero.");
}
}
}
catch コードによって検出される例外の種類を明確にすることをお勧めします。try には、それぞれ異なる例外を処理する複数の catch ステートメントを含めることができます。
finally ブロック
finally ブロックに含まれているコードは、例外が発生するかどうかにかかわらず常に実行されます。finally ブロックを使用すると、必ず、リソースから制御が戻ります。たとえば、ファイルは必ず閉じられます。
try
{
// Code to try here.
}
catch (SomeSpecificException ex)
{
// Code to handle exception here.
}
finally
{
// Code to execute after try (and possibly catch) here.
}
例外処理の使用
例外は、必ずしも、プログラム内で重大な問題が発生していることを示すものであるとは限りません。関連のなくなったコードのセクションから抜け出すための便利な手法として、またはメソッドが失敗したことを示す手段として、使用されることがあります。.NET Framework クラス メソッドには、特定の条件について警告するために例外を作成するものが数多くあります。
throw キーワードを使用すると、独自の例外を発生させることができます。次に例を示します。
class ProgramThrow
{
static void DoWork(int x)
{
if (x > 5)
{
throw new System.ArgumentOutOfRangeException("X is too large");
}
}
static void Main()
{
try
{
DoWork(10);
}
catch (System.ArgumentOutOfRangeException ex)
{
System.Console.WriteLine(ex.Message);
}
}
}
予期しない状況が発生することが考えられる場合には、プログラムで例外を使用します。たとえば、ユーザー入力の処理、ファイルの読み取り、インターネット経由での情報へのアクセスなどを実行する場合などが挙げられます。