[C#] nullable型

nullableな型とは、reference typeのnullと同じような動きをするようにvalue typeの変数にnullの値を取れる機能を追加したもの。
class objectなどreference typeはNULLの値を取ることができる。
C言語でNULLが登場する場面はポインターが空であることを明示的に示すときがほとんどだ。
C#ではclassと同じように使えるstructはvalue type であるためnullの値になることができない。これは、intやboolなどでも同じことが言える。value typeでも「値が入っていない」という意味でnullが使えるように拡張したものがnullableなintやbool。
.NETでは、Nullableというgenericな型があり、value typeにnullを値として取れる型を宣言できる。たとえば、Nullableとすればintの値かnullのどちらかの値を取れる。
Nullableの簡易記法として、”?”がサポートされている。実際のコードではこれを見ることが多い。

bool? nullableBool = null;

のように使用する。これは

Nullable<bool> nullableBool = null;

と同じ意味になる。
演算子??
??は、nullableな変数がnullでない場合はその値を使用し、nullの場合はdefaultの値を使用するケースで使う。
以下では、myFlagがnullであれば128が、nullでなければそのままの値が使用される。

myFlag = null;
myNullable = myFlag ?? 128;
notNullable = myFlag ?? 128;
Console.WriteLine("myNullable {0} notNullable {0}", myNullable,
notNullable);

一方、nullableな型は元の型と互換ではないため、
以下のように元の型に直接代入するとコンパイルエラーとなる。

myNullable = myFlag;
notNullable = myFlag;

このときのエラーは

CS0266: 型 ‘int?’ を ‘int’ に暗黙的に変換できません。

というものになる。

広告
%d人のブロガーが「いいね」をつけました。