例外処理とは?try-catchの基本を理解する【C#】

C#

はじめに

C#を書き始めた頃、
エラーが出ると少し怖く感じていました。

赤いメッセージが出て、プログラムが止まってしまう。

「とりあえずtry-catchで囲めばいいのかな?」
そんな状態からスタートした記憶があります。

今回は、
例外処理ってそもそも何なのか?
を、なるべくやさしく整理してみます。

例外ってなに?

例外とは、
プログラムの実行中に発生するエラーのことです。

例えばこんなケースです。

  • null(何も入っていない値)を使おうとした
  • 数字に変換できない文字を数値に変換しようとした
  • 存在しないデータを取得しようとした

こうした問題が起きると、何も対処しなければプログラムは停止します。

try-catchの基本形

例外が発生しても、
すぐに止まらないようにする仕組みが try-catch です。

try
{
    // エラーが起きるかもしれない処理
}
catch (Exception ex)
{
    // エラーが起きたときの処理
}
  • try の中で処理を実行する
  • エラーが起きたら catch に移る

という流れになります。

具体例で見てみる

例えば、文字列を数値に変換する処理です。

string input = "abc";
int number = int.Parse(input);

このコードはエラーになります。
なぜなら "abc" は数値に変換できないからです。

これを try-catch で囲むとこうなります。

try
{
    string input = "abc";
    int number = int.Parse(input);
}
catch (Exception ex)
{
    Console.WriteLine("変換に失敗しました");
}

これで、エラーが起きてもプログラムは停止しません。

例外処理の目的

例外処理の目的は、
「エラーをなかったことにする」ことではありません。

大事なのは、

  • 何が起きたのか
  • どう対応するのか

を考えることです。

例えば:

  • ユーザーにエラーメッセージを表示する
  • ログに記録する
  • 安全な値に置き換える

といった対応が考えられます。

とりあえずcatchはやらない

初心者の頃にやりがちなのが、

catch (Exception)
{
}

何も書かないcatchです。

これだと、
エラーが起きても何も分からなくなってしまいます。

少なくとも、ログを出すなど
「何が起きたか分かる状態」にしておくことが大切です。

例外は「想定外」に使う

すべてを例外で処理する必要はありません。

例えば、

if (input == "")
{
    return;
}

これは「想定内」の分岐です。

例外は、

  • 普通は起きない
  • 起きたら困る

といった「想定外」のケースに使うと考えると分かりやすいです。

まとめ

例外処理は、

エラーを消すためのもの
ではなく、

エラーにきちんと向き合うための仕組み

だと理解するようになりました。

最初は、

  • try-catchの形を覚える
  • エラーが起きる理由を理解する

これだけでも十分です。

少しずつ慣れていけば大丈夫です。

次回予告

次は、
よくある例外の種類とその対処方法を、
もう少し具体的にまとめてみます。

  • NullReferenceException
  • FormatException
  • InvalidOperationException

などを、実例つきで整理していく予定です。