今回は null 許容参照型 です。C#8 で一番有名な新機能で、強い関心のある方も多いのではないでしょうか?
公式はこちら
このブログでの目次?はこちら
使い方
この新機能は、明示的に有効にしないと使えません。何も考えずに有効にすると、これまで書いていたコードの多くが警告になってしまい大変なことになります。
特に警告をエラーとするオプションも有効にしていた場合は致命的です。
ということで早速有効にする方法です。
.csproj に追加
プロジェクト全体で有効になります。 .csproj に
<Nullable>enable</Nullable>
を追加します。追加するとこんな感じ
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <RootNamespace>_11NullableReferenceTypes</RootNamespace> <Nullable>enable</Nullable> </PropertyGroup> </Project>
ディレクティブを追加
ディレクティブを書いたところだけ有効になります。
一部のクラスだけから順次コードを変えていく場合などに有効です。
#nullable enable
機能の概要
- 参照型も基本 null 非許容の扱いになる
- null を許容したい変数は ? を型の後ろに付けて宣言する
null を許容したい場合に、? を付けるのは構造体と同じなので覚えやすいですね。
例
有効にするとこんな感じです。
- null 非許容の変数に null を入れようとすると警告になります
- null 非許容の変数のメソッドを呼ぶと警告になります
かしこい C# コンパイラ
C# のコンパイラは賢いので文脈もみてくれるようです。
- if で非 null チェックをした後は警告になっていません
- 非 null 値を代入後は警告になっていません
素晴らしいですね。既存プロジェクトに何も考えずに適用はできませんが、新規プロジェクトでは最初から有効にしておきたいです。