dotnet.exeのSDKを6.0にしてからプロパティがnullの状態でアクセスする可能性があるのでnull許容型を使うよう促す警告を、よく受けるようになりました。
プロパティの定義の段階で初期化を同時にできない場合はこの警告が出るようで、コンストラクタで初期化すれば良さそうな気もしますが、処理が抜けてしまうリスクを考えるとnullの場合を想定したコーディングが必要になります。
Null許容型で定義
int? a = null;
null判定
if (a == null) { // nullの場合 } else { // nullでない場合 }
null判定(is null)
if (a is null) { // nullの場合 } else { // nullでない場合 }
文字列でnullまたは長さ0の文字列を判定
String.IsNullOrEmpty(str)
文字列でnullまたは長さ0の文字列およびスペースのみ文字列を判定
String.IsNullOrWhiteSpace(str)
nullの場合別の値で初期化する。
int b = (a == null) ? -1 : a;
null合体演算子(??)でnullの場合別の値で初期化する。
int b = a ?? -1;
変数aがnullの場合-1をそうで無い場合aの値を返す。
null演算子(?)でnullの場合プロパティのアクセスを回避する。
Console.WriteLine(s?.Length)
sがnullでない場合s.Lengthを返す。そうで無い場合nullが返る?
感想
nullを判定し回避策に使えそうな手段を調べてみました。
null回避は、いろいろな状況に対応するようなプログラミングを考える必要があり、かなり悩ましいので出来るだけ変数の宣言時に初期化できないか検討するようにしたいと思います。
コメント