rksoftware

Visual Studio とか C# とかが好きです

C# 8 の確認 - null 許容参照型

今回は 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 非許容の変数のメソッドを呼ぶと警告になります

f:id:rksoftware:20191027172304j:plain

かしこい C# コンパイラ

C# のコンパイラは賢いので文脈もみてくれるようです。

  • if で非 null チェックをした後は警告になっていません
  • 非 null 値を代入後は警告になっていません

f:id:rksoftware:20191027172325j:plain

素晴らしいですね。既存プロジェクトに何も考えずに適用はできませんが、新規プロジェクトでは最初から有効にしておきたいです。