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