TECH I.S.

C# 例外 - Try..Catch


C#の例外

C#コードを実行すると、さまざまなエラーが発生する可能性があります。プログラマーによるコーディングエラー、間違った入力によるエラー、またはその他の予測不可能なエラーです。

エラーが発生すると、C#は通常停止し、エラーメッセージを生成します。これの専門用語は次のとおりです。C#は例外をスローします(エラーをスローします)となります。


C# try and catch

tryステートメントを使用すると、実行中にエラーをテストするコードブロックを定義できます。 catchステートメントを使用すると、tryブロックでエラーが発生した場合に実行されるコードのブロックを定義できます。 trycatchキーワードはペアになっています。

構文

{.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#では、ArithmeticExceptionFileNotFoundExceptionIndexOutOfRangeExceptionTimeOutExceptionなど、多くの例外クラスを使用できます。

{.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歳だった場合は、例外は発生しません

{.language-csharp .techis-white}
checkAge(20);

出力は次のようになります。

Access granted - You are old enough!


プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細