C# 例外 - Try..Catch
C#の例外
C#コードを実行すると、さまざまなエラーが発生する可能性があります。プログラマーによるコーディングエラー、間違った入力によるエラー、またはその他の予測不可能なエラーです。
エラーが発生すると、C#は通常停止し、エラーメッセージを生成します。これの専門用語は次のとおりです。C#は例外をスローします(エラーをスローします)となります。
C# try and catch
try
ステートメントを使用すると、実行中にエラーをテストするコードブロックを定義できます。
catch
ステートメントを使用すると、tryブロックでエラーが発生した場合に実行されるコードのブロックを定義できます。
try
とcatch
キーワードはペアになっています。
構文
{.language-csharp .techis-white}
try
{
//
<em>Block of code to try
</em>
}
catch (Exception e)
{
//
<em>Block of code to handle errors
</em>
}
3つの整数の配列を作成する次の例を考えてみましょう。
mynumbers[10]が存在しない為、これによりエラーが発生します。
{.language-csharp .techis-white .techis-border-red}
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]); // error!
エラーメッセージは次のようになります。
System.IndexOutOfRangeException: 'Index was outside the bounds of the
array.'
エラーが発生した場合は、try...catch
を使用してエラーをキャッチし、コードを実行してそれを処理します。
次の例では、catchブロック内の変数 (e
)を組み込みのMessage
プロパティとともに使用し、例外を説明するメッセージを出力します。
例
{.language-csharp .techis-white}
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
出力は次のようになります。
Index was outside the bounds of the array.
独自のエラーメッセージを出力することもできます。
例
{.language-csharp .techis-white}
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
出力は次のようになります。
Something went wrong.
Finaly
finally
ステートメントを使用すると、結果に関係なくtry...catch
の後でコードを実行できます。
例
{.language-csharp .techis-white}
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine("Something went wrong.");
}
finally
{
Console.WriteLine("The 'try catch' is finished.");
}
出力は次のようになります。
Something went wrong.
The 'try catch' is finished.
The throw keyword
throw
ステートメントを使用すると、カスタムエラーを作成できます。
throw
ステートメントは、例外クラスと一緒に使用されます。 C#では、ArithmeticException
、FileNotFoundException
、IndexOutOfRangeException
、TimeOutException
など、多くの例外クラスを使用できます。
例
{.language-csharp .techis-white}
static void checkAge(int age)
{
if (age < 18)
{
throw new ArithmeticException("Access denied - You must be at least 18 years old.");
}
else
{
Console.WriteLine("Access granted - You are old enough!");
}
}
static void Main(string[] args)
{
checkAge(15);
}
プログラムに表示されるエラーメッセージは次のとおりです。
System.ArithmeticException: 'Access denied - You must be at least 18 years old.'
もしもage
が20歳だった場合は、例外は発生しません。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。