rksoftware

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

C# 2.0 以降の新機能の確認 - C# 8.0 - Null 許容参照型

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

Null 許容参照型

 https://docs.microsoft.com/ja-jp/dotnet/csharp/nullable-references
 参照型を基本 null 非許容の扱いにできる。
 ※この機能を使うには明示的に機能を ON にする必要があります。

 参照型も基本 null 非許容の扱いになる。
 null を許容したい変数は ? を型の後ろに付けて宣言する。
 null 非許容の変数に null を入れようとすると警告になる。
 null 非許容の変数のメソッドなどを呼ぶと警告になる。

// null 非許容の変数に null を入れようとすると警告
string text1 = null;                // 警告 CS8600 Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。

string? text2 = null;
// null 許容の変数をそのまま使うと警告
Console.WriteLine(text2.Length);    // 警告 CS8602 null 参照の可能性があるものの逆参照です。
// null 許容の変数を使うときは ? をつける
Console.WriteLine(text2?.Length);

// null 非許容でも文脈を見て、null と思われる場合は警告がでる
Console.WriteLine(text1.Length);    //  警告 CS8602 null 参照の可能性があるものの逆参照です。

// 文脈を見て null でないとわかると警告はでない
if (text1 != null) Console.WriteLine(text1.Length);
text1 = ""; Console.WriteLine(text1.Length);