C# の null 安全
null 安全
C# には 8.0 から null 安全のための機能として null 許容参照型が導入されています。 null 許容参照型を利用することで C# で記述するプログラムの null 安全を実現することが出来ます。 C# 言語のバージョンを 8.0 異常にする必要があるため、.NET Core の 3.x 以上にする必要があります。
設定の有効化
Visula Studio を利用している場合はプロジェクトのプロパティから『Null 許容』を『有効化』に設定します。
この設定だけでは警告として扱われるため、必要であれば『警告をエラーとして扱う』を有効化します。
null 許容参照型
『Null 許容』の設定を有効化すると null 許容を指定していない参照型の変数に null
を代入できなくなります。
参照型の変数に null
を代入する必要がある場合は null 許容参照型として明示する必要があります。
null 許容参照型の記述方法は null 許容値型と同じ様に型名の後ろに ?
を付けます。
// この変数は null 許容参照型になっていないため、コンパイル時に警告が出ます
Form form1 = null;
// この変数は null 許容参照型になっているため、コンパイル時に警告は出ません
Form? form2 = null;
『Null 許容』の設定を有効化し null
の可能性がある変数を型で明示することによって、NullReferenceException
が発生しないことをコンパイル時に検出することが出来ます。
null を許容しない変数への代入
null
を許容しない変数に代入する際には事前に null
チェックを行うか、null
合体演算子 (??
) を利用してデフォルト値を指定する必要があります。
Form? f = null;
if (f != null)
{
// このスコープでは f に対する null チェックが実行され f が null でないことが保証されているため、null を許容しない変数への代入が可能です。
Form f1 = f;
}
// null 合体演算子 (??) を利用することで f2 には f が null でない場合には f が、f が null の場合には new Form() が代入されます。
Form f2 = f ?? new Form();
// フロー解析の結果、null でないことが保証されている場合にも null を許容しない変数への代入が可能です。
f = new Form();
Form f3 = f;