C# | ゼロからはじめるプログラミング、30日で基礎を学ぶC#:基本機能を身に付ける - Day12:例外処理

C# 30日で身につけるC#
スポンサーリンク
スポンサーリンク

Day12 後半のゴール

Day12 後半では、前半で学んだ try / catch / finally / throw を実際のプログラムに組み込みながら、 「例外処理があるとプログラムがどれほど安全になるのか」を体験していただきます。

扱う題材は次の二つです。

数値入力チェック ファイル読み込みエラー処理

どちらも現実のアプリケーションで頻繁に発生する“エラーが起きやすい処理”であり、 例外処理の重要性を深く理解できる内容になっています。

数値入力チェックを作る

ユーザー入力は必ず失敗する可能性がある

ユーザーが入力する値は、必ずしも正しいとは限りません。 数字を入力してほしい場面でも、文字列や記号が入力されることがあります。

例外処理を使うことで、入力ミスがあってもプログラムを止めずに安全に処理できます。

try-catch を使った数値入力チェックの基本形

Console.Write("数値を入力してください:");
string input = Console.ReadLine();

try
{
    int number = int.Parse(input);
    Console.WriteLine("入力された数値: " + number);
}
catch (FormatException)
{
    Console.WriteLine("数値として認識できませんでした");
}
C#

深掘りポイント

int.Parse は「数値に変換できない文字列」を渡すと例外を投げます。 そのため、try-catch で囲むことで安全に扱えます。

また、catch の型を FormatException にすることで、 「どんな種類のエラーを捕まえるか」を明確にできます。

finally を使って後処理を追加する

try
{
    int number = int.Parse(input);
    Console.WriteLine("入力された数値: " + number);
}
catch
{
    Console.WriteLine("数値として認識できませんでした");
}
finally
{
    Console.WriteLine("入力処理を終了します");
}
C#

深掘りポイント

finally は「エラーが起きても起きなくても必ず実行される」ため、 ログを残す 画面をクリアする リソースを解放する

など、後処理を確実に行いたい場面で非常に重要です。

throw を使って独自のエラーを作る(応用)

入力値がマイナスならエラーにする例

try
{
    int number = int.Parse(input);

    if (number < 0)
    {
        throw new Exception("0以上の数値を入力してください");
    }

    Console.WriteLine("入力された数値: " + number);
}
catch (Exception ex)
{
    Console.WriteLine("エラー: " + ex.Message);
}
C#

深掘りポイント

throw を使うことで「自分でエラーを作る」ことができます。 入力チェックや業務ルールの違反を検出する場面で非常に役立ちます。

数値入力チェックの完成形

Console.Write("数値を入力してください:");
string input = Console.ReadLine();

try
{
    int number = int.Parse(input);

    if (number < 0)
    {
        throw new Exception("0以上の数値を入力してください");
    }

    Console.WriteLine("入力された数値: " + number);
}
catch (FormatException)
{
    Console.WriteLine("数値として認識できませんでした");
}
catch (Exception ex)
{
    Console.WriteLine("エラー: " + ex.Message);
}
finally
{
    Console.WriteLine("入力処理を終了します");
}
C#

完成のポイント

FormatException と Exception を分けることで、 「変換エラー」と「業務ルール違反」を区別して処理できます。

ファイル読み込みエラー処理を作る

ファイル操作は例外が発生しやすい

ファイル読み込みは、次のような理由で失敗することがあります。

ファイルが存在しない 権限がない 他のアプリが使用中 ファイルが壊れている

そのため、例外処理は必須です。

try-catch を使ったファイル読み込みの基本形

try
{
    string text = File.ReadAllText("data.txt");
    Console.WriteLine(text);
}
catch (FileNotFoundException)
{
    Console.WriteLine("ファイルが見つかりません");
}
catch (Exception ex)
{
    Console.WriteLine("ファイルを読み込めませんでした");
    Console.WriteLine("詳細: " + ex.Message);
}
C#

深掘りポイント

FileNotFoundException を個別に扱うことで、 「ファイルがない場合だけ特別なメッセージを出す」ことができます。

例外の種類を分けて処理することは、実務で非常に重要です。

finally を使って後処理を追加する

try
{
    string text = File.ReadAllText("data.txt");
    Console.WriteLine(text);
}
catch
{
    Console.WriteLine("ファイルを読み込めませんでした");
}
finally
{
    Console.WriteLine("ファイル処理を終了します");
}
C#

深掘りポイント

finally は「後片付け」を確実に行うための場所です。 ファイルを閉じる処理などを入れることが多いです。

ファイル読み込みエラー処理の完成形

try
{
    string text = File.ReadAllText("data.txt");
    Console.WriteLine(text);
}
catch (FileNotFoundException)
{
    Console.WriteLine("ファイルが存在しません");
}
catch (UnauthorizedAccessException)
{
    Console.WriteLine("ファイルにアクセスする権限がありません");
}
catch (Exception ex)
{
    Console.WriteLine("予期しないエラーが発生しました");
    Console.WriteLine("詳細: " + ex.Message);
}
finally
{
    Console.WriteLine("ファイル処理を終了します");
}
C#

完成のポイント

例外の種類ごとに catch を分けることで、 ユーザーにとってわかりやすいエラー表示ができます。

Day12 後半のまとめ

Day12 後半では、例外処理を使った実用的なプログラムを作りました。

数値入力チェック → FormatException / throw / finally ファイル読み込みエラー処理 → FileNotFoundException / UnauthorizedAccessException

例外処理は「プログラムを止めずに安全に動かす」ための最重要機能です。

タイトルとURLをコピーしました