C#におけるFormatExceptionエラーの対処法
今回は、C#プログラムでよく発生するエラーの一つである「FormatException」について、その対処方法を5つのパターンで紹介します。
FormatExceptionは、データの形式が予期したものと異なる場合に発生します。主に文字列を数値や日付などの特定の形式に変換しようとした時にこのエラーが発生します。
C#のエラー一覧はコチラ
-
【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
1. Int32.Parseメソッドで文字列を整数に変換する
まず最初に紹介する例は、Int32.Parseメソッドを使って文字列を整数に変換するケースです。
このメソッドは、引数として与えられた文字列を整数に変換しますが、文字列が整数としての形式になっていない場合、FormatExceptionが発生します。
エラーが発生するソースコード
1 2 3 4 5 6 7 8 9 10 11 |
using System; public class Program { public static void Main() { string str = "123abc"; int num = Int32.Parse(str); Console.WriteLine(num); } } |
出力結果
System.FormatException: Input string was not in a correct format.
上記の例では、文字列"123abc"をInt32.Parseメソッドで整数に変換しようとしていますが、"123abc"は整数としての形式になっていないため、FormatExceptionが発生します。
この問題を解決するには、整数に変換する前に文字列が整数としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みることができます。
対処後のソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; public class Program { public static void Main() { string str = "123abc"; int num; if (Int32.TryParse(str, out num)) { Console.WriteLine(num); } else { Console.WriteLine("The string could not be converted to an integer."); } } } |
出力結果
The string could not be converted to an integer.
2. double.Parseメソッドで文字列を浮動小数点数に変換する
次に、double.Parseメソッドを使って文字列を浮動小数点数に変換するケースを見てみましょう。
このメソッドも、文字列が浮動小数点数としての形式になっていない場合、FormatExceptionが発生します。
エラーが発生するソースコード
1 2 3 4 5 6 7 8 9 10 11 |
using System; public class Program { public static void Main() { string str = "123.45abc"; double num = double.Parse(str); Console.WriteLine(num); } } |
出力結果
System.FormatException: Input string was not in a correct format.
この例でも、文字列"123.45abc"をdouble.Parseメソッドで浮動小数点数に変換しようとしていますが、"123.45abc"は浮動小数点数としての形式になっていないため、FormatExceptionが発生します。
この問題を解決するには、浮動小数点数に変換する前に文字列が浮動小数点数としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みます。
対処後のソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; public class Program { public static void Main() { string str = "123.45abc"; double num; if (double.TryParse(str, out num)) { Console.WriteLine(num); } else { Console.WriteLine("The string could not be converted to a double."); } } } |
出力結果
The string could not be converted to a double.
3. DateTime.Parseメソッドで文字列を日付に変換する
次に、DateTime.Parseメソッドを使って文字列を日付に変換するケースを見てみましょう。
このメソッドも、文字列が日付としての形式になっていない場合、FormatExceptionが発生します。
エラーが発生するソースコード
1 2 3 4 5 6 7 8 9 10 11 |
using System; public class Program { public static void Main() { string str = "2023/13/13"; DateTime date = DateTime.Parse(str); Console.WriteLine(date); } } |
出力結果
System.FormatException: The string was not recognized as a valid DateTime.
この例では、文字列"2023/13/13"をDateTime.Parseメソッドで日付に変換しようとしていますが、"2023/13/13"は日付としての形式になっていないため、FormatExceptionが発生します。
この問題を解決するには、日付に変換する前に文字列が日付としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みます。
対処後のソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; public class Program { public static void Main() { string str = "2023/13/13"; DateTime date; if (DateTime.TryParse(str, out date)) { Console.WriteLine(date); } else { Console.WriteLine("The string could not be converted to a DateTime."); } } } |
出力結果
The string could not be converted to a DateTime.
4. Enum.Parseメソッドで文字列を列挙型に変換する
次に、Enum.Parseメソッドを使って文字列を列挙型に変換するケースを見てみましょう。
このメソッドも、文字列が列挙型としての形式になっていない場合、FormatExceptionが発生します。
エラーが発生するソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System; public class Program { enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; public static void Main() { string str = "Sunday"; Days day = (Days)Enum.Parse(typeof(Days), str); Console.WriteLine(day); } } |
出力結果
System.FormatException: Requested value 'Sunday' was not found.
この例では、文字列"Sunday"をEnum.Parseメソッドで列挙型に変換しようとしていますが、"Sunday"は列挙型Daysの中の値と一致しないため、FormatExceptionが発生します。
この問題を解決するには、列挙型に変換する前に文字列が列挙型としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みます。
対処後のソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; public class Program { enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; public static void Main() { string str = "Sunday"; Days day; if (Enum.TryParse(str, out day)) { Console.WriteLine(day); } else { Console.WriteLine("The string could not be converted to the Days enum."); } } } |
出力結果
The string could not be converted to the Days enum.
5. Guid.Parseメソッドで文字列をGUIDに変換する
最後に、Guid.Parseメソッドを使って文字列をGUIDに変換するケースを見てみましょう。
このメソッドも、文字列がGUIDとしての形式になっていない場合、FormatExceptionが発生します。
エラーが発生するソースコード
1 2 3 4 5 6 7 8 9 10 11 |
using System; public class Program { public static void Main() { string str = "1234"; Guid guid = Guid.Parse(str); Console.WriteLine(guid); } } |
出力結果
System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
この例では、文字列"1234"をGuid.ParseメソッドでGUIDに変換しようとしていますが、"1234"はGUIDとしての形式になっていないため、FormatExceptionが発生します。
この問題を解決するには、GUIDに変換する前に文字列がGUIDとしての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みます。
対処後のソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; public class Program { public static void Main() { string str = "1234"; Guid guid; if (Guid.TryParse(str, out guid)) { Console.WriteLine(guid); } else { Console.WriteLine("The string could not be converted to a GUID."); } } } |
出力結果
The string could not be converted to a GUID.
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版
まとめ
以上が、C#のFormatExceptionが発生したときの対処法についての説明でした。
エラーの原因は大抵、ある型から別の型への変換に失敗することで発生します。
特に、文字列を数値や日付、列挙型、GUIDなどに変換するときによく見られます。
これらの問題を解決する最も一般的な方法は、TryParseメソッドを使用することです。
このメソッドは、変換が成功したかどうかを真偽値で返し、出力パラメータに変換結果を設定します。変換が成功しない場合、このメソッドはfalseを返し、FormatExceptionをスローしません。
また、変換前に入力が適切な形式になっているかどうかを確認することも一つの対策となります。
最後まで読んで頂き、ありがとうございました。少しでもお役に立てたなら幸いです!
C#のエラー一覧はコチラ
-
【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る