【T2b】新しいNull許容/非許容型(3/6)
| プロジェクトタイプ | C#コンソールアプリ※ |
|---|---|
| プロジェクト名 | T2b |
| ソリューション名 | PIT2 |
| ターゲットフレームワーク | .NET 8.0(長期的なサポート) |
| 最上位レベルのステートメントを使用しない | 使用する(チェックオフ) |
※「コンソールアプリ(.NET Framework)」ではないので注意せよ!
2b-3. Null許容参照型
まずはNull許容型の考え方の変化を端的に実感することができるコードを紹介しよう.Program.csを_に示すように変更しよう.
| |
単に string 型の変数hogeを宣言して,Console.WriteLine()メソッドで表示を行っているだけである.
しかし,このプログラムを記述すると,変数hogeの初期値の部分に_に示すような警告が表示されるはずである.
従来のC#では_で使用しているような,string 型をはじめとしたクラス型や配列型といった参照型の変数には null を代入することができた.
現在のC#では,参照型であっても null を代入する必要がある場合は変数の型をNull許容型にしなければならなくなった.
つまり型名に?をつける必要がある,ということである.
したがって,_は_のように書くのが正しい方法となった. Program.csを_に示す通りに書き替えよう.
| |
このような型をNull許容参照型という.
従来のNull許容型は基本的に値型から作成するものであったが,新しいC#では値型であろうと参照型であろうと null を代入する必要があるのであれば
型名に?を付けなければならなくなった.これはメソッド内のローカル変数や,クラスのフィールド/プロパティであっても同じである.
注意するべきは,値型のNull参照型と異なり,Null許容参照型には .HasValueプロパティや .Valueプロパティがない,という点である. ためしにProgram.csに_に示す内容を追記してみよう.
| |
5行目では従来と同じ 値型の Null許容型,ここでは int 型のNull許容型の変数piyoを宣言している.
そして7~10行目ではこの変数piyoに対して,その変数に null が入っているかどうかを確認するために.HasValueプロパティを,
また変数に入っている値を取り出すために.Valueプロパティを使用している.値型のNull許容型に関しては操作方法は従来と同じである.
しかし,12~15行目で最初に宣言したNull許容参照型の変数hogeに対して同じ操作をしようとしている部分はエラーとなって,
Visual Studio のエディタ上では赤い波線が現れているはずである(_).
参照型の変数の中身が null であるかどうかのチェックや,その変数の中身にアクセスする方法に関してはNull許容参照型であっても従来と同じである. したがって_のようにするのが正しい.Program.csを_に示す通りに書き替えよう.
| |
ちなみにif (hoge != null)の部分はif ( hoge is not null )のように書くこともできる
(参考).



