【C#】入力文字列の形式が正しくありません。の解決方法【System.FormatException】
C#で発生するエラー(例外)
System.FormatException: 入力文字列の形式が正しくありません。
上記のエラー(例外)が発生したときの解決方法をご紹介します。
下記にC#で発生する例外処理の一覧をまとめていますので解決できない場合は合わせてご確認ください。
⇒例外処理クラス一覧まとめ【原因と解決方法】
C#のおすすめ講座を受講して、最短1週間でC#をマスターしよう!
⇒C#が学べるおすすめプログラミングスクール&オンライン講座11選
C# 入力文字列の形式が正しくありません。のエラーの原因
「System.FormatException: 入力文字列の形式が正しくありません。」
のエラーの原因は
引数の入力形式が無効である(文字やnull)
からです。
エラーコードの例は下記の通りです。
string str = "text";
// エラーが発生する。strには数字かnullを設定する必要がある。
int a = Convert.ToInt32(str);
Convert.ToInt32()は「指定した数値の文字列形式を等価の 32 ビット符号付き整数に変換する」メソッド。
今回のエラーの場合、「数値の文字列」ではない値を引数にしているのでエラーになります。
数値を入れるべきところに、文章文字列を設定しているからです。
string str = "text";
// エラーが発生する。strには数字を設定する必要がある。
int b = int.Parse(str);
上記の例も同じようにint.Parse()メソッドで「数値の文字列」ではない値を引数にしているためエラーが発生してしまいます。"1″や"2″などの数値文字列を代入してください。
「System.FormatException: 」の詳細はこちらから
C# 入力文字列の形式が正しくありません。エラーの解決方法
「System.FormatException: 入力文字列の形式が正しくありません。」のエラーを解決する方法をご紹介します。
①引数に入力形式の正しい値を設定する(今回の場合は数値)
string str = "2";
// 入力形式の正しい文字列を設定する
int a = Convert.ToInt32(str);
上記のように入力形式の正しい文字列を引数に変換してください。
今回の例の場合、Convert.ToInt32()の入力形式は「文字列形式の数値」なので「"2″」を代入しました。
string str = "2";
// エラーが発生する。strには数字を設定する必要がある。
int b = int.Parse(str);
②メソッド実行前に入力値チェックを行う
string str = "text";
int a,b;
// メソッドを実行できるか確認する。※int.TryParse()は文字列をint型に変換できるか否かを判定するメソッド
if (int.TryParse(str, out a))
{
b = int.Parse(str);
b = Convert.ToInt32(str);
}
メソッド実行前にnull判定を行うことで、エラーを回避します。
文字列が数値に変換できるか否かチェックする「int.TryParse(str,out a)」という標準クラスライブラリを使用します。当然"text"の時はint型数値に変換できないので、falseを返します。falseが{}内の処理が実行されないため、エラーを解消することができます。
※標準クラスライブラリは、「よく使う処理を機能ごとにまとめてそれを他のプログラムから呼び出せるようにしたもの」です。詳しくはこちら
上記2つが主な「System.FormatException: 入力文字列の形式が正しくありません。」の解決策です。
より良いコードを書くために
おすすめの対処法を2つ紹介しましたが、エラーを解決するために
②メソッド実行前に入力値チェックを行う
を実装しましょう。
①の対応策だと、別の処理で変数が別の文字列に更新されると、よくエラーが発生します。注意してください。大規模なシステム開発などでバグが発生しやすい「変更に弱いコード」です。
②の対応策だと、別の処理で変数が別物時列に更新されても、エラーが発生しません。
メソッド実行前に引数が正しい引数かどうか入力値チェックを行っているからです。
この対応をしておくと、大規模なシステム開発などでバグが発生しにくい「変更に強いコード」です。
エラーを解決できなくて途方に暮れている人へ。
■無料プログラミング講座を開設しています!
下記にVisual Studioを使ったC#プログラミング初心者向け完全ガイドを掲載しています。
このガイドを一通り勉強すれば、C#プログラミングの基礎が学べます。
是非チャレンジしてみてください!
プログラミング初心者の方はぜひチャレンジしてみてください!!