【C#】 try catch の使い方をわかりやすく解説

※ この記事にはアフィリエイトリンクが含まれます

プログラムでエラーが起きて困っていませんか?

・エラーでアプリが突然止まってしまう

・どこで例外が起きたかわからない

・エラーを安全に処理する方法がわからない

結論から言うと、C#のtry catchを正しく使えば
エラーを安全に取り扱えます。

・try catchで例外を捕まえる

・catchでエラー内容に応じた処理をする

・finallyで後片付けをする

この記事では、C# try catch 使い方を
やさしく具体例付きで解説します。

目次

なぜtry catchが必要なのか?

まず、プログラムは実行中に予期せぬ出来事が起こります。
例えばファイルが見つからない、ネットワークが切れるなどです。

何も対策をしないと、アプリは突然終了してしまいます。
これを防ぐために例外処理が必要です。

簡単なイメージ

tryは保険つきのとりあえずやってみる場所です。
問題が起きたらcatchが受け止めます。

最後に必ずやることがあればfinallyで処理します。
これがC#のtry catch finallyの基本イメージです。

基本の書き方(コード例)

まずは最も基本的な書き方です。
実際のコードで見てみましょう。

try
{
    // ここに危ない処理を書く
    int a = int.Parse("ABC");
}
catch (Exception ex)
{
    // 例外が起きたときの処理
    Console.WriteLine("エラー発生: " + ex.Message);
}
finally
{
    // 必ず実行したい処理
    Console.WriteLine("終了処理");
}

上の例ではint.Parseで変換できないと例外が出ます。
catchでその例外を受け取り、警告を出します。

ポイント

  • tryの中で例外が起きると、そこで処理は中断される
  • catchは一番近いcatchが実行される
  • finallyは例外の有無に関係なく必ず実行される

複数のcatchで種類ごとに処理を変える

例外は種類がいろいろあります。
ファイル系、ネットワーク系、変換系などです。

種類ごとに処理を変えるなら、複数のcatchを使います。
具体例を見てみましょう。

try
{
    var text = File.ReadAllText("data.txt");
    int num = int.Parse(text);
}
catch (FileNotFoundException fnf)
{
    Console.WriteLine("ファイルが見つかりません: " + fnf.Message);
}
catch (FormatException fe)
{
    Console.WriteLine("数字の形式が不正です: " + fe.Message);
}
catch (Exception ex)
{
    Console.WriteLine("その他のエラー: " + ex.Message);
}

この書き方だと、何が原因かがわかりやすくなります。
実務ではログに書いたり、ユーザーに分かりやすいメッセージを出します。

よくある実務ケースと具体例

ここからはよくある現場のケースを紹介します。
実務での使い方がイメージしやすくなります。

1) ファイル読み込み(ユーザーがファイルを指定)

ユーザーがアップロードしたファイルを読む時に使います。
ファイルが無い、権限がない、といった問題が起きます。

try
{
    var text = File.ReadAllText(userFilePath);
    // 処理続行
}
catch (UnauthorizedAccessException uae)
{
    // 権限エラーならユーザーに伝える
    Console.WriteLine("ファイルにアクセスできません。権限を確認してください。");
}
catch (FileNotFoundException fnf)
{
    Console.WriteLine("指定のファイルが見つかりませんでした。");
}
catch (Exception ex)
{
    // 予期せぬエラーはログに残す
    LogError(ex);
    Console.WriteLine("エラーが発生しました。管理者に連絡してください。");
}

ポイントはユーザーに優しいメッセージと
管理者向けのログを分けることです。

2) データベース接続(ネットワークや接続失敗)

データベースに接続する処理は失敗しやすい場所です。
タイムアウトや認証エラーが起きます。

try
{
    using (var conn = new SqlConnection(connString))
    {
        conn.Open();
        // クエリ実行
    }
}
catch (SqlException sqe)
{
    // SQL関連のエラーは詳細をログ
    LogError(sqe);
    Console.WriteLine("データベースエラーが発生しました。");
}
catch (Exception ex)
{
    LogError(ex);
    Console.WriteLine("予期せぬエラーです。サポートに連絡してください。");
}

ここではusingを使ってリソースを自動で解放しています。
finallyが不要な場合もありますが、catchでログは必須です。

3) 外部API呼び出し(タイムアウトやレスポンス不正)

外部サービスを呼ぶ時は必ず例外を想定します。
リトライやフォールバック処理を組むのが実務です。

try
{
    var result = await httpClient.GetStringAsync(url);
}
catch (HttpRequestException hre)
{
    // ネットワークエラーはリトライ候補
    LogWarning(hre);
    // 必要なら短い待ち時間の後リトライ
}
catch (Exception ex)
{
    LogError(ex);
}

ネットワークは不安定なので、再試行や代替処理を用意します。
ユーザーにエラーを見せない工夫も大切です。

例外の再スロー(rethrow)の違い

catchの中で例外をそのまま投げ直すことがあります。
ここで2つの書き方の違いを説明します。

// そのまま再スロー(元のスタックトレースを保つ)
catch (Exception)
{
    throw;
}

// 新しい例外として投げる(スタックトレースが変わる)
catch (Exception ex)
{
    throw new Exception("処理中にエラー", ex);
}

元の情報を残したい場合はthrowだけを使います。
追加情報を付けたい場合は新しい例外を作りますが、注意が必要です。

よくある間違いとベストプラクティス

初心者がよくするミスを避けるコツをまとめます。
簡単に覚えられるポイントです。

  • catchで何もしない(空のcatch)は避ける
    ログや代替処理を必ず行うか再スローする
  • すべての例外をcatch (Exception)で受けるのは慎重に
    特定の例外を先に書く
  • エラー処理と通常処理を混ぜすぎない
    読みやすく保守しやすいコードにする
  • ユーザーには優しいメッセージを出す
    機密情報(スタックトレース等)は見せない
  • ログは必ず残す
    原因調査がしやすくなる

実務で使う便利なテクニック

現場で役に立つ、ちょっとした工夫を紹介します。
すぐに使えるテクニックです。

ログに例外の詳細を残す

例外のMessageだけでなくStackTraceも残すと原因が早くわかります。
日時や処理名も一緒にログにすると便利です。

特定の例外だけをcatchする

必要な種類だけcatchして、予期せぬ例外は上位に投げる方が安全です。
これによりバグの見逃しを減らせます。

リトライやフォールバックを用意する

外部依存がある処理は失敗する可能性が高いです。
短いリトライか、別の方法で処理を進めると良いです。

まとめ

C# try catch 使い方のポイントを整理します。
初心者でも実務で使えるようにまとめました。

・tryで危ない処理を囲む
・catchで例外ごとに処理を分ける
・finallyで後片付けを必ず行う

・ログは必ず残す
・catchは無意味に空にしない
・外部処理はリトライや代替を考える

この記事の例を元に、まずは小さなコードで
try catchを試してみてください。
エラーに強いプログラムが作れるようになります。

#エンジニアとして、もっと自分の力を活かしたいあなたへ

「このまま今の職場にいて、成長できるんだろうか?」

C#を使っている方なら、一度はそう感じたことがあるかもしれません。

実は今、C#/.NETエンジニアの市場価値は高まっており
年収アップ・フルリモート・自社開発企業など、選べる選択肢は確実に増えています。

もし今後、C#を活かして働きたい、あるいは開発現場で経験を積みたいとお考えなら…
自分に合った転職サービスを早めに知っておくことが大きな武器になります。

現役エンジニアからのサポート付き・無料で学べるスクール・社内SE特化の求人など、
転職支援サービスを厳選したまとめ記事をこちらで紹介しています。

ここまで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次