C#中級

中級 C#で学ぶ例外設計|練習問題編

導入

例外設計は、アプリケーションの信頼性を高めるために不可欠な要素です。特に、C#では例外処理の機能が強力であり、適切に活用することでエラー時の挙動を制御できます。本記事では、特定のシチュエーションを通じて、例外設計の重要性と実践的なアプローチを学びます。

教科書レベルの解説(例外設計)

重要な概念の整理

例外設計の核心は、発生する可能性のあるエラーを予測し、それに対する適切な処理を行うことです。特に、外部リソースへのアクセスやユーザー入力に関する処理では、さまざまなエラーが発生する可能性があります。これらのエラーを適切に処理することで、アプリケーションの安定性が向上します。

コード例(C#)


using System;
using System.IO;

class FileProcessor
{
    public void ProcessFile(string filePath)
    {
        try
        {
            if (string.IsNullOrEmpty(filePath))
            {
                throw new ArgumentException("ファイルパスは空であってはいけません。");
            }

            string content = File.ReadAllText(filePath);
            Console.WriteLine("ファイルの内容: " + content);
        }
        catch (FileNotFoundException ex)
        {
            Console.WriteLine($"ファイルが見つかりません: {ex.Message}");
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine($"引数エラー: {ex.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"予期しないエラーが発生しました: {ex.Message}");
        }
    }
}

コードの行ごとの解説

  1. クラス`FileProcessor`を定義し、ファイル処理のメソッドを持つ。
  2. `ProcessFile`メソッドで、引数として受け取ったファイルパスが空かどうかをチェックする。
  3. ファイルが存在しない場合、`FileNotFoundException`をキャッチし、エラーメッセージを出力する。
  4. 引数が無効な場合は`ArgumentException`をスローし、適切なメッセージを表示する。
  5. その他の予期しないエラーについては、一般的な`Exception`をキャッチしてエラーメッセージを表示する。

練習問題編

以下の練習問題を通じて、例外設計の理解を深めてください。

  1. 問題1: 引数として受け取った整数が負の場合、例外をスローするメソッドを実装してください。

    
    public void CheckPositive(int number)
    {
        if (number < 0)
        {
            throw new ArgumentOutOfRangeException("数値は負であってはいけません。");
        }
    }
    
  2. 問題2: 配列のインデックスが範囲外の場合に例外を処理するコードを書いてください。

    
    public void AccessArray(int[] array, int index)
    {
        try
        {
            Console.WriteLine(array[index]);
        }
        catch (IndexOutOfRangeException ex)
        {
            Console.WriteLine($"インデックスエラー: {ex.Message}");
        }
    }
    
  3. 問題3: ファイルの書き込み処理を行うメソッドを作成し、例外を処理してください。

    
    public void WriteToFile(string filePath, string content)
    {
        try
        {
            File.WriteAllText(filePath, content);
        }
        catch (UnauthorizedAccessException ex)
        {
            Console.WriteLine($"アクセスエラー: {ex.Message}");
        }
    }
    

まとめ

  • 例外処理は、エラー発生時のアプリケーションの挙動を制御するために重要です。
  • エラーの種類に応じて適切な例外をキャッチし、ユーザーにわかりやすいメッセージを提供することが求められます。
  • 具体的なシチュエーションを想定した例外設計が、実務において役立ちます。