カテゴリ: C# 更新日: 2026/01/18

C#の例外処理の基本!try-catch-finally構文をやさしく解説

C#の例外処理の基本!try-catch-finally構文をやさしく解説
C#の例外処理の基本!try-catch-finally構文をやさしく解説

先生と生徒の会話形式で理解しよう

生徒

「プログラムでエラーが出たときに止まらないようにする方法ってあるんですか?」

先生

「ありますよ。C#では『例外処理』という仕組みを使って、エラーに対応できます。」

生徒

「難しそうですね…。初心者でもわかるように教えてもらえますか?」

先生

「もちろんです!まずは基本的な構文『try-catch-finally』を一緒に見ていきましょう。」

1. 例外処理とは?

1. 例外処理とは?
1. 例外処理とは?

プログラミングをしていると、予期しないエラーが発生することがあります。例えば、数字を0で割ってしまったり、存在しないファイルを開こうとしたりする場合です。こういったエラーを放置すると、プログラムが強制終了してしまいます。

そんなときに使うのが、C#の例外処理です。例外(エラー)が起きたときに、プログラムの流れを止めず、安全に対処できるようにします。

2. try-catch-finally構文とは?

2. try-catch-finally構文とは?
2. try-catch-finally構文とは?

C#では、例外を処理するためにtry-catch-finally構文を使います。

それぞれの役割は以下のとおりです:

  • try:エラーが起こるかもしれない処理を書く
  • catch:実際にエラーが起きたときの対応を書く
  • finally:エラーが起きても起きなくても、最後に必ず実行される処理を書く(省略可能)

3. 実際の例を見てみよう

3. 実際の例を見てみよう
3. 実際の例を見てみよう

次の例は、0で割り算をしようとしてエラーになるケースです。try-catch構文を使ってエラーをキャッチし、プログラムが止まらないようにします。


int number1 = 10;
int number2 = 0;

try
{
    int result = number1 / number2;
    Console.WriteLine("結果: " + result);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("エラーが発生しました: " + ex.Message);
}

このコードを実行すると、次のような結果が表示されます。


エラーが発生しました: ゼロで除算しようとしました。

4. finallyで「最後の処理」を書く

4. finallyで「最後の処理」を書く
4. finallyで「最後の処理」を書く

finallyブロックは、例外が発生してもしなくても、必ず最後に実行される部分です。たとえば、ファイルやデータベースの接続を閉じる処理などをここに書きます。


try
{
    Console.WriteLine("処理を開始します。");
    int[] numbers = { 1, 2, 3 };
    Console.WriteLine(numbers[5]); // 存在しないインデックス
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("配列の範囲外にアクセスしました: " + ex.Message);
}
finally
{
    Console.WriteLine("finallyブロックが実行されました。");
}

処理を開始します。
配列の範囲外にアクセスしました: インデックスが配列の範囲を超えています。
finallyブロックが実行されました。

5. どんなときに使うの?

5. どんなときに使うの?
5. どんなときに使うの?

例外処理は、ユーザー入力を扱う場面や、ファイルを読み込むインターネット通信など、予測できないエラーが起こる可能性がある部分で使います。

例外処理をしないと、プログラムが突然終了してしまい、ユーザーにとって使いにくいアプリになります。try-catch-finallyを使えば、エラーが起きても丁寧に対応できる、安心・安全なプログラムを作ることができます。

6. よくある例外の種類

6. よくある例外の種類
6. よくある例外の種類

C#では、発生するエラーに応じて、さまざまな「例外クラス」が用意されています。catch文では、特定のエラーだけを処理するように分けることも可能です。

  • DivideByZeroException:0で割り算しようとした
  • IndexOutOfRangeException:配列の範囲外を参照した
  • FormatException:文字列から数値への変換に失敗した
  • FileNotFoundException:存在しないファイルを開こうとした

7. 複数のcatchを使う

7. 複数のcatchを使う
7. 複数のcatchを使う

複数の種類のエラーに対応したいときは、catch文を複数書くことができます。


try
{
    string input = "abc";
    int number = int.Parse(input); // 数字に変換できない
}
catch (FormatException)
{
    Console.WriteLine("数字に変換できませんでした。");
}
catch (Exception ex)
{
    Console.WriteLine("その他のエラーが発生しました: " + ex.Message);
}

数字に変換できませんでした。

Exceptionクラスは、すべての例外の「親」にあたるクラスなので、最後に書くようにしましょう。

8. catchの中でエラー内容を詳しく知るには?

8. catchの中でエラー内容を詳しく知るには?
8. catchの中でエラー内容を詳しく知るには?

catchのあとに書かれる(Exception ex)のような記述では、発生したエラーの情報を変数exに受け取ることができます。ex.Messageでエラー内容を表示できるので、ログに残したり、ユーザーに伝えたりするのに役立ちます。

まとめ

まとめ
まとめ

C#での例外処理は、初心者がつまずきやすいポイントのひとつですが、実はとても実用的で重要な仕組みです。特に「try-catch-finally構文」は、エラーに強い安定したプログラムを作るうえで欠かせない技法です。実際の開発現場では、予期せぬ例外が必ずといっていいほど発生します。そうした場合に備えて、あらかじめtryブロックに処理を囲い、catchでエラーに対応し、finallyで後始末をするのが基本的な流れとなります。

たとえば、数値の割り算で0を除数にしてしまったり、ユーザーの入力ミスで文字列を数値に変換できなかったり、ファイルが存在しなかったりすることはよくあります。こうしたよくある例外には、それぞれDivideByZeroExceptionFormatExceptionFileNotFoundExceptionなどの専用クラスが用意されており、catch文で個別に対処できます。

また、複数のcatch文を使うことで、異なる種類の例外ごとに適切な処理を行うことができます。これは現場でも非常によく使われるテクニックであり、Exceptionクラスを最後に書くことで他の例外クラスよりも後に処理されるよう配慮する必要があります。

finallyブロックの使いどころも忘れてはいけません。たとえばファイルを開いたあとに必ず閉じたい場合や、データベースの接続を終了させたい場合など、どんな状況でも必ず実行してほしい処理を入れておく場所です。例外の有無にかかわらず実行されるので、リソースの解放処理などに活用されます。

ここで、例外処理全体を組み合わせたコード例を示します。


try
{
    Console.WriteLine("計算を開始します");
    int a = 10;
    int b = 0;
    int result = a / b;
    Console.WriteLine("結果: " + result);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("0で割ることはできません: " + ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("その他のエラーが発生しました: " + ex.Message);
}
finally
{
    Console.WriteLine("処理を終了しました。");
}

このように、C#の例外処理構文を正しく使うことで、予測できないトラブルにも柔軟に対応できる堅牢なプログラムを構築できます。ユーザーにとって安心して使えるアプリケーションを提供するためにも、エラー処理の基本をしっかり理解し、日々の開発に役立てていきましょう。

先生と生徒の振り返り会話

生徒

「try-catch-finallyって最初は難しそうだったけど、使い方がわかってきました!」

先生

「そうだね、最初は戸惑うかもしれないけど、例外処理は実はとても実用的で重要な機能なんだよ。」

生徒

「finallyで必ず最後に実行される処理があるのも安心ですね。」

先生

「そのとおり。リソースの後片付けにはぴったりだね。catchの中ではエラーの詳細をログに出せるし、ユーザーへのメッセージも工夫できるよ。」

生徒

「例外クラスにもいろいろな種類があるんですね。用途に合わせてcatch文を分けるのが大事なんですね!」

先生

「その通り。FormatException、DivideByZeroException、IndexOutOfRangeExceptionなど、よく使う例外クラスは覚えておくと便利だよ。」

生徒

「今度からは例外が出ても焦らず、try-catchで対処できるようにがんばります!」

先生

「よくできました!今学んだ内容は実践で必ず役立つよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#で例外処理とは何ですか?初心者にもわかりやすく知りたいです。

C#における例外処理とは、プログラム中で予期せぬエラー(例外)が発生したときに、プログラムが強制終了しないように処理を行う仕組みです。try-catch構文を使って、エラーを補足して安全に対処することができます。
カテゴリの一覧へ
新着記事
New1
C#
C#でループの中に条件分岐を書く方法!入れ子制御構造の基本
New2
C#
C#のthrow文の基本!例外を自分で発生させる方法
New3
C#
C#のADO.NETの基礎!SqlConnectionとSqlCommandの使い方を初心者向けに徹底解説
New4
C#
C#の例外クラス階層を理解しよう!Exception・SystemExceptionの基本をやさしく解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.3
Java&Spring記事人気No3
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.4
Java&Spring記事人気No4
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.5
Java&Spring記事人気No5
COBOL
COBOLのコンパイラと開発環境を徹底解説!初心者にもわかりやすい入門ガイド
No.6
Java&Spring記事人気No6
COBOL
COBOLの帳票レイアウトを美しく!可読性向上テクニックを徹底解説
No.7
Java&Spring記事人気No7
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.8
Java&Spring記事人気No8
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説