【C#】try-catchの実践

try-catch-finallyとは

C#には例外処理をするために「try-catch-finally」があります。

例外処理が行われていない場合、実行時エラーが発生した時にプログラムが終了してしまいます。

システム開発では、システムがダウンしてしまうため注意が必要です。

「try-catch-finally」とは、例外が発生する可能性がある処理に使うものです

「try-catch-finally」を用いることで、例外が発生しない場合の処理と例外が発生した場合のを分けることができます。

さらに、「finally」を使うことで例外の有無に関わらず、最後に必ず実行される処理を記述することができます。

「try-catch-finally」は下記のように記述します。

try {
    例外が発生する可能性のある処理
} catch (例外の型 引数) {
    例外が発生した場合の処理(例外が発生しなければ行われない処理)
} finally {
    例外の有無に関わらず、最後に必ず実行される処理
}

 

サンプルコード

try-catch

using System;

namespace c_trycatch
{
    class Program
    {
        static int Caluculation(int a, int b)
        {
            return a / b;
        }

        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine(Caluculation(5, 0));
            }
            catch (ArithmeticException e) // ArithmeticExceptionはキャスト演算または変換演算にエラーがあった場合にスローされます
            {
                Console.WriteLine("例外です");
                Console.WriteLine(e.Message);
            }
        }
    }
}

実行結果:

例外です
Attempted to divide by zero.

このようにして例外が発生した場合の処理を記述することができます。

 

try-catch-finally

finally」ブロックの中の処理は、例外の有無に関わらず、最後に必ず実行されます。

using System;

namespace c_trycatch
{
    class Program
    {
        static int Caluculation(int a, int b)
        {
            return a / b;
        }

        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine(Caluculation(5, 0));
            }
            catch (ArithmeticException e)
            {
                Console.WriteLine("例外です");
                Console.WriteLine(e.Message);
            }
            finally  // finallyを追加
            {
                Console.WriteLine("finallyブロックの中の処理は最後に必ず実行されます。");
            }
        }
    }
}

実行結果:

例外です
Attempted to divide by zero.
finallyブロックの中の処理は最後に必ず実行されます。

上記のように、例外が発生した場合でも「finally」ブロックの中の処理は最後に必ず実行されます。

 

throwとは

throw」を用いることにより、任意のタイミングで例外を投げることができます

throw new 例外

■公式ドキュメント(throw)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/throw

using System;

namespace c_trycatch
{
    class Program
    {
        static int Caluculation(int a, int b)
        {
            if (b != 0)
            {
                return a / b;
            }
            else
            {
                throw new Exception("throwを用いることで任意のタイミングで例外をスローできます。");
            }
        }

        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine(Caluculation(5, 0));
            }
            catch (Exception e)
            {
                Console.WriteLine("例外です");
                Console.WriteLine(e.Message);
            }
        }
    }
}

実行結果:

例外です
throwを用いることで任意のタイミングで例外をスローできます。

このように、「throw」を用いることにより、任意のタイミングで例外をスローできます。

 

おすすめ書籍

■C#を学習し始めた方向け
やさしいC 第3版 (「やさしい」シリーズ)

1週間でCの基礎が学べる本

確かな力が身につくC「超」入門 第2版 (Informatics&IDEA)