【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 )
のように書くこともできる
(参考).