.NET Framework2.0から追加されている機能なんだけど、恥ずかしながら知りませんでした。
その名のとおり、nullを表現するための型なんだけどstructのようなnullを許容しないようなものに対して使えます。

時間を作って検証しなきゃならないけど、走り書き。(動作未確認。Webでさらっと見ただけ。。)

// こんな感じで宣言
Nullable tBoolValue = new Nullable(true);

// nullを代入可
tBoolValue = null;
if(tBoolValue == null)
{
    // もちろん判定可能
}

でもって、シンタックスシュガーとして以下のように表現可能です。(普段はこっちを使います。)

// ?をつけるとNullableになる。
bool? tBoolValue = true;

// bool?->boolにはキャストが必要
bool tValue = (bool)tBoolValue;

用途としては、

  • IndexOf系で要素が見つからなかった時に-1を返す代わりにnullを返す。
  • ColorやPoint3dなど
カテゴリー: 技術情報

4件のコメント

squld · 2007-05-30 09:33

これって、内部的にBoxing/Unboxingしてるなら性能に影響しそうだけど、どうなのかな?

koreyasu · 2007-05-30 12:34

性能は調べてみる必要があるけど、JavaのBoxing/Unboxing程は遅くないと思う。
推測だけど、演算子のOverrideも同時に行ってると思うので、Java程Auto-Boxing/Unboxingをする必要性はないだろうから。

匿名 · 2007-05-30 15:04

tBoolValue.Value で、キャストなしで値が取れるっぽい。
tBoolValue.HasValue で、null/非nullを判定できるっぽい。
tBoolValue = true; みたいに値を入れる時は、そのまま入れられる。

なんつーか、簡単に宣言できるラッパーだねぇ。

shimada · 2007-06-01 11:12

あ。↑のコメント私です。
ログインしないでコメントすると、ゲストになるんですね~。知らなかった。
というか、外部からのコメントもありなのですか。なるほど。

現在コメントは受け付けていません。