【C#】System.FormatException: 入力文字列の形式が正しくありません

C#

System.FormatException例外は、主に文字列を特定の型に変換しようとした時に、その文字列の形式が変換を試みる型に適合していない場合に発生します。

この記事では、System.FormatExceptionを引き起こす一般的なケースと、それを適切に処理する方法を紹介します。

エラー発生の例

以下は、文字列から数値への変換に失敗して例外 System.FormatException が発生する例です。

using System;

class Program
{
    static void Main(string[] args)
    {
        string input = "123abc";

        // 文字列を整数に変換
        int number = Convert.ToInt32(input); // この行でSystem.FormatExceptionが発生する

        Console.WriteLine($"変換結果: {number}");
    }
}

エラー処理1:例外をキャッチする

try~catchを使用することで、発生する例外を捕まえて、エラー発生時の処置を記述できます。

using System;

class Program
{
    static void Main(string[] args)
    {
        string input = "123abc";

        try
        {
            // 文字列を整数に変換
            int number = Convert.ToInt32(input); // この行でSystem.FormatExceptionが発生する可能性がある
            Console.WriteLine($"変換結果: {number}");
        }
        catch (FormatException ex)
        {
            // FormatExceptionが捕捉された場合の処理
            Console.WriteLine("エラーが発生しました: " + ex.Message); // エラーメッセージを出力
        }
    }
}

エラー処理2:TryParseの戻り値を見る

文字列から数値への変換にTryParseメソッドを使用することで、メソッドの戻り値で変換の成否を確認できます。

using System;

class Program
{
    static void Main(string[] args)
    {
        // 文字列を整数に安全に変換する例
        string input = "123abc";
        int number;

        // TryParseを使用して文字列の変換を試みる
        bool result = int.TryParse(input, out number); // 変換が成功したかどうかをブール値で受け取る

        if (result)
        {
            // 変換成功時の処理
            Console.WriteLine($"変換結果: {number}");
        }
        else
        {
            // 変換失敗時の処理
            Console.WriteLine("入力文字列の形式が正しくありません。");
        }
    }
}

エラー処理3:入力文字列を適切な内容にする

そもそも、なぜエラーが発生したかというと、数値に変換できない文字列 “123abc” が処理に混入したからです。実際のプログラミングにおいては、なぜ適切ではない入力文字列が入力されたのかを調べたり、どうやったら適切な文字列のみを使用できるかを設計することになります。

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