.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
あ。↑のコメント私です。
ログインしないでコメントすると、ゲストになるんですね~。知らなかった。
というか、外部からのコメントもありなのですか。なるほど。
現在コメントは受け付けていません。