Exception Class からエラーコードを解析する ~超基礎編~

仕事で C# プロジェクトが吐き出したエラーコードを解析しエラーの箇所を特定するために、Exception class を活用することがありました。これまで Exception Class についてあまり把握しきれてなかったので、勉強のため整理してみようと思います。
この記事では、まず Exception Class の超基本的な使い方を整理し、色々な Exception Class を今後使えるようにしていこうと思います。

#Visual Studio で 適当な C# コード書いてみる
まずは、Visual Studio の「新しいプロジェクトの作成」から、適当な ASP.core のコンソールアプリを作成します。
今回は、以下コードを入力し、割り算を算出するコンソールアプリを作成しました。

```csharp:program.cs
using System;

namespace ConsoleApp20191012
{
    class Program
    {
        static void Main(string[] args)
        {

            int num1 = 0; int num2 = 0;
            Console.WriteLine("Console Calcutator i C#\r");

            Console.WriteLine("Type a number, and then press Enter");

            num1 = Convert.ToInt32(Console.ReadLine());
            
            Console.WriteLine("Type a number, and then press Enter");
            num2 = Convert.ToInt32(Console.ReadLine());
            
            Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
           
            Console.Write("Press any key to close the Calculator console app...");
            Console.ReadKey();
        }
    }
}
```

このコードは単純にコンソールで入力した二つの数字を割り算するコードです。
例えば最初の数字を100、二つ目の数字を4と入力すると、25という答えがでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/ffbd31b9-ff7d-3a87-9e53-10314a468f44.png)

この時入力した値は、100 と 4　という明らかな整数でしたが、これをたとえばひらがなを入力してみるとどうなるでしょうか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/a4032740-3cea-6937-7538-7a397e9809dd.png)

コンソールの入力で「あ」と入力したときには、ハンドルされていない例外というアラートと共にデバックが停止しました。
これは Visual Studio の機能の一つですが、こういった例外が入力された際に、デバッグの途中で停止するのではなく、コンソールに何かしらの文字を返すような処理をしたいときに便利なのが、「Exception Class」です。

#Exception Class を挿入する
Exception Class の挿入は簡単で、try/catchを使います。
Try の中で処理されるものの例外が、Catch に飛ばされるという感じです。
例えば先ほどの例外処理にあった「あ」という数字以外のものが入力された際に、コンソールに「正しい値を入力してください」という書き込みをする処理をさせるためには、以下のようなコード書きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/fed82466-c5d3-202a-defd-26438d71d2ac.png)

最初の文字を入力する際に、例外処理がある場合にコンソールに文字「正しい値を入力してください」を出力されるような処理です。実施にデバッグしてみると、以下のような結果になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/24c50ede-6ef2-6713-3d84-84ebccd9a6fa.png)

これが例外処理の超基礎的なコードです。
これは単純におかしな値が入力されたときに例外を返す処理を行っていますが、例えば「〇〇÷0」というように分母の正しくない数字が入力された場合は「ArithmeticException Class」を使います。

#ArithmeticException Class を使ってみる
Exception Class は色々な Class が用意されていますが、その中にある、数式的な例外があったときに処理を実行する ArithmeticException Class を使ってみます。

先ほどのコードを以下のように置き換えてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/f8cc7952-24eb-aefc-e1a5-cc1d44708123.png)

計算をする処理のところで例外処理で、「分母には正しい文字を入力してください」という文字を返すようにしています。結果分子に100、0を入力すると、例外処理を返すようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/db94b854-853d-7661-5fdf-1734ec5100e5.png)

これで正しく例外処理を設定できました。
以下コードです。

```csharp:program.cs
using System;

namespace ConsoleApp20191012
{
    class Program
    {
        static void Main(string[] args)
        {

            int num1 = 0; int num2 = 0;
            Console.WriteLine("Console Calcutator i C#\r");

            Console.WriteLine("Type a number, and then press Enter");

            try
            {
                num1 = Convert.ToInt32(Console.ReadLine());
            }
            catch (Exception e)
            {
                Console.WriteLine("正しい値を入力してください");
            }

            Console.WriteLine("Type a number, and then press Enter");
            num2 = Convert.ToInt32(Console.ReadLine());

            try
            {
                Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
            }
            catch (ArithmeticException e)
            {
                Console.WriteLine("分母には正しい文字を入力してください");
            }

            Console.Write("Press any key to close the Calculator console app...");
            Console.ReadKey();
        }
    }
}
```

超基礎編は以上ですが、上記の処理は毎日ウォーミングアップで書いても良いくらいよく使うので、しっかり理解していきたいと思います。次回の例外の記事では、例外と throw メソッドを活用したデバッグについて整理していきたいと思います。

#参考URL
Visual Studio でシンプルな C# コンソール アプリを作成する
https://docs.microsoft.com/ja-jp/visualstudio/get-started/csharp/tutorial-console?view=vs-2019

Exception Class
https://docs.microsoft.com/ja-jp/dotnet/api/system.exception?view=netframework-4.8

ArithmeticException Class
https://docs.microsoft.com/ja-jp/dotnet/api/system.arithmeticexception?view=netframework-4.8