2011-01-14 15 views
4

しばらく前に、Nullable <>値の型は、値の型をカプセル化し、boolをHasValueにカプセル化するクラスであると考えました。 BCLで実装されたnullの暗黙のキャストオペラドールを使用します。Nullable <>型はBCL、CLR、またはその両方の実装ですか?

しかし、構造体では、これはどのように達成できますか? Nullable <>構造体はCLRにとって特別ですか?

+0

'Nullable'は' Nullable '構造体オブジェクト(混乱の場合)で動作する静的クラスです。 – BoltClock

+0

Nullableについて質問しています。> –

答えて

8

Nullable<T>は通常の構造体として定義されていますが、HasValueプロパティに応じて[mscorlib]System.Nullable`1のインスタンスにはCLR to box/unboxの特別なフックがあります。これに関する詳細はこちらhere

+0

面白い作品です。私は個人的にはnullをテストすることで空のNULL値をテストすることを期待するべきではないという考えを嫌います。そのような期待がない場合、 'Dictionary.TryGetValue'のようなものが' T'がクラスか参照された型かどうかにかかわらず 'T?'を返すことが可能です。キーが存在し、その値が 'null'の場合、返される項目は' HasValue'レポートがtrue、 'Value'がnullを返します。つまり、型がnullをサポートしていることを意味する一般的な制約はなく、無効をテストする効率的な方法はありません。 – supercat

0

Nullable型に関するMSDNの記事は次のとおりです。

http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=VS.100).aspx

は、私はあなたがNull許容型はSystem.Nullable<T>構造体のインスタンスであることを誤理解している場合を除き、NULL可能<>とで取得しようとしているかわからないんだけど。

+0

.Netの仕組みについて詳しく知りたいだけです。 –

0

Nullable<>はmscorlib内で実装された構造体です。

特別なことは、Nullable<X>の別名としてX?を認識するC#コンパイラです。

関連する問題