エラーの対処方法

【C# sharp】FormatExceptionの5つの発生原因と対処方法

ChatGPTのAPIを使わずに自動化することが可能です。
下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。

C#におけるFormatExceptionエラーの対処法

今回は、C#プログラムでよく発生するエラーの一つである「FormatException」について、その対処方法を5つのパターンで紹介します。
FormatExceptionは、データの形式が予期したものと異なる場合に発生します。主に文字列を数値や日付などの特定の形式に変換しようとした時にこのエラーが発生します。

サルモリ
それじゃあ、さっそく見ていこう!

C#のエラー一覧はコチラ

【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法

ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...

続きを見る

1. Int32.Parseメソッドで文字列を整数に変換する

まず最初に紹介する例は、Int32.Parseメソッドを使って文字列を整数に変換するケースです。
このメソッドは、引数として与えられた文字列を整数に変換しますが、文字列が整数としての形式になっていない場合、FormatExceptionが発生します。

エラーが発生するソースコード

 出力結果
System.FormatException: Input string was not in a correct format. 

上記の例では、文字列"123abc"をInt32.Parseメソッドで整数に変換しようとしていますが、"123abc"は整数としての形式になっていないため、FormatExceptionが発生します。
この問題を解決するには、整数に変換する前に文字列が整数としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みることができます。

対処後のソースコード

 出力結果
The string could not be converted to an integer. 
サルモリ
これでFormatExceptionが出なくなったね! TryParseメソッドは、変換が成功するとtrueを、失敗するとfalseを返すから、変換が可能かどうかを確認しながら安全に整数へ変換できるんだ。

2. double.Parseメソッドで文字列を浮動小数点数に変換する

次に、double.Parseメソッドを使って文字列を浮動小数点数に変換するケースを見てみましょう。
このメソッドも、文字列が浮動小数点数としての形式になっていない場合、FormatExceptionが発生します。

エラーが発生するソースコード

 出力結果
System.FormatException: Input string was not in a correct format. 

この例でも、文字列"123.45abc"をdouble.Parseメソッドで浮動小数点数に変換しようとしていますが、"123.45abc"は浮動小数点数としての形式になっていないため、FormatExceptionが発生します。
この問題を解決するには、浮動小数点数に変換する前に文字列が浮動小数点数としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みます。

対処後のソースコード

 出力結果
The string could not be converted to a double. 
サルモリ
同じく、TryParseメソッドを使うことで、安全に文字列を浮動小数点数に変換することができるよ。変換できない文字列が入ってきた場合でもエラーを回避できるから、便利だよね!

3. DateTime.Parseメソッドで文字列を日付に変換する

次に、DateTime.Parseメソッドを使って文字列を日付に変換するケースを見てみましょう。
このメソッドも、文字列が日付としての形式になっていない場合、FormatExceptionが発生します。

エラーが発生するソースコード

 出力結果
System.FormatException: The string was not recognized as a valid DateTime. 

この例では、文字列"2023/13/13"をDateTime.Parseメソッドで日付に変換しようとしていますが、"2023/13/13"は日付としての形式になっていないため、FormatExceptionが発生します。
この問題を解決するには、日付に変換する前に文字列が日付としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みます。

対処後のソースコード

 出力結果
The string could not be converted to a DateTime. 
サルモリ
DateTimeも同様だね。TryParseメソッドを使用することで、文字列が日付として正しい形式になっているかどうかを確認しながら、安全に日付に変換することができるよ。これでFormatExceptionを防げるよ!

4. Enum.Parseメソッドで文字列を列挙型に変換する

次に、Enum.Parseメソッドを使って文字列を列挙型に変換するケースを見てみましょう。
このメソッドも、文字列が列挙型としての形式になっていない場合、FormatExceptionが発生します。

エラーが発生するソースコード

 出力結果
System.FormatException: Requested value 'Sunday' was not found. 

この例では、文字列"Sunday"をEnum.Parseメソッドで列挙型に変換しようとしていますが、"Sunday"は列挙型Daysの中の値と一致しないため、FormatExceptionが発生します。
この問題を解決するには、列挙型に変換する前に文字列が列挙型としての形式になっているかどうかを確認するか、TryParseメソッドを使用して安全に変換を試みます。

対処後のソースコード

 出力結果
The string could not be converted to the Days enum. 
サルモリ
列挙型に変換する場合もTryParseメソッドを使うと安全だね。ここまで見てきたように、TryParseメソッドは非常に便利なツールで、FormatExceptionを防ぐのに一役買っているんだよ。

5. Guid.Parseメソッドで文字列をGUIDに変換する

最後に、Guid.Parseメソッドを使って文字列をGUIDに変換するケースを見てみましょう。
このメソッドも、文字列がGUIDとしての形式になっていない場合、FormatExceptionが発生します。

エラーが発生するソースコード

 出力結果
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メソッドを使用して安全に変換を試みます。

対処後のソースコード

 出力結果
The string could not be converted to a GUID. 
サルモリ
Guidの変換もTryParseメソッドで安全に行えるね。これで5つの例を見てきたけど、どれも同じ原則が適用されているよね。TryParseメソッドを使うことで、安全に変換を試みることができるよ。

C#のLinqを徹底的に学びたい方は画像をクリックしてご覧ください!
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版

まとめ

以上が、C#のFormatExceptionが発生したときの対処法についての説明でした。

エラーの原因は大抵、ある型から別の型への変換に失敗することで発生します。

特に、文字列を数値や日付、列挙型、GUIDなどに変換するときによく見られます。
これらの問題を解決する最も一般的な方法は、TryParseメソッドを使用することです。

このメソッドは、変換が成功したかどうかを真偽値で返し、出力パラメータに変換結果を設定します。変換が成功しない場合、このメソッドはfalseを返し、FormatExceptionをスローしません。

また、変換前に入力が適切な形式になっているかどうかを確認することも一つの対策となります。

最後まで読んで頂き、ありがとうございました。少しでもお役に立てたなら幸いです!

サルモリ
最後まで読んでくれてありがとう!!

C#のエラー一覧はコチラ

【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法

ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...

続きを見る

-エラーの対処方法

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock