一部でうわさになっていた機能ですが、VS2005 CTP March 2004 で実装されていたんですね。全然気付いてなかったです(^^;
本来、値型は null という状態をとることはできません。C# の int も System.Int32 構造体のエイリアスなので、当然、値型です。なので表現できるのは整数値のみで null というのは表現できません。もし、値型も null を取れるようにすると値型の意味合いがかなり大きく変わってしまいます。しかし、そんなことをしなくても Generics を使えば 「null も表現できる値型」 が作れます。それが Nullable
まぁ、以下のコードを見てもらえばわかるでしょう。
注意:某所の情報によると Nullable
int? i = null;
?
// 型名を表示(Nullable!1 とのこと)Console.WriteLine(i.GetType().Name);
?
// null か確認if (!i.HasValue){ Console.WriteLine("!HasValue");}
?
// null が確認// ちなみになぜこれで動くかというと op_Implicit、すなわち implicit operator T (Nullable) が定義されているから。 if (i == null)
{ Console.WriteLine("null");}
?
// たとえ !HasValue であっても参照できる// これも op_Implicit のおかげ。if (i != 0){ Console.WriteLine("i != 0");}
?
// ただし !HasValue のときに Value を参照すると InvalidOperationException//if (i.Value != 0)//{// Console.WriteLine("i.Value != 0");//}?
// 整数を代入i = 1;
?
// HasValue はもちろん trueConsole.WriteLine(i.HasValue);
?
// i だけで参照。これも op_Implicit のおかげ。Console.WriteLine("{0:d}", i);Console.WriteLine(i.ToString());
?
// Value で参照Console.WriteLine("{0:d}", i.Value);Console.WriteLine(i.Value.ToString());
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。