C#のtry-catch構文:エラーに強いコードを書くための基本
プログラムを書いていると、実行時エラーに出会うことがあります。たとえば次のような場面です:
- 存在しないファイルを読み込もうとした
- 数値の0で割ろうとした
- ユーザーが空の入力をした
このような 予期しない事態 をうまく処理できるコードを書くには、C# の try-catch 構文が不可欠です。
目次
try-catchの基本構文
try
{
// 例外が発生するかもしれない処理
}
catch (例外の型 ex)
{
// 例外が発生したときの処理
}
実例:0で割るエラーを防ぐ
TryCatchExampleというプロジェクト名で作成してください
int a = 10;
int b = 0;
try
{
int result = a / b;
Console.WriteLine("結果:" + result);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("エラー発生:" + ex.Message);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TryCatchExample
{
internal class Program
{
static void Main(string[] args)
{
int a = 10;
int b = 0;
try
{
int result = a / b;
Console.WriteLine("結果:" + result);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("エラー発生:" + ex.Message);
}
}
}
}
出力結果:
エラー発生:0 で除算しようとしました。
catchは複数書ける
エラーの種類によって処理を分けたいときは、catch を複数用意できます。
try
{
// 例外が出るかもしれない処理
}
catch (FormatException ex)
{
Console.WriteLine("フォーマットが正しくありません");
}
catch (Exception ex)
{
Console.WriteLine("その他のエラー:" + ex.Message);
}
上から順にチェックされるため、具体的な例外→汎用的な Exception の順で書くのがポイントです。
finally句で「後始末」
例外が起きても起きなくても、必ず実行される処理を finally ブロックに書けます。たとえばファイルやDB接続のクローズ処理などです。
StreamReader reader = null;
try
{
reader = new StreamReader("data.txt");
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
catch (FileNotFoundException)
{
Console.WriteLine("ファイルが見つかりませんでした。");
}
finally
{
if (reader != null)
reader.Close(); // ← ここは必ず実行される
}
例外が発生しないコードの書き方も大切
例外処理は「保険」であって、「通常の処理」は if 文などで防げるなら防ぐのがベストです。
if (b != 0)
{
int result = a / b;
Console.WriteLine("結果:" + result);
}
else
{
Console.WriteLine("0では割れません");
}
まとめ
ポイント | 内容 |
---|---|
try | 例外が起きる可能性のある処理を囲む |
catch | 起きた例外に対して適切に対応する |
finally | 例外の有無にかかわらず実行される後処理 |
ベストプラクティス | 予防できるならifなどで回避し、例外は最終手段として扱う |
発展:例外の再スロー
catch 内でログだけ取って、上位に投げ直すこともできます。
catch (Exception ex)
{
Console.WriteLine("ログ:" + ex.Message);
throw; // ← もとの例外を再スロー
}
おわりに
try-catch を正しく使うことで、エラーに強く、予測可能なコードを書くことができます。初心者のうちは「全部に try-catch をつける」のではなく、「ここは落ちるかもしれない」というポイントを見極めながら活用していきましょう。
訪問数 3 回, 今日の訪問数 3回
ディスカッション
コメント一覧
まだ、コメントがありません