種類による違いはあるのでしょうか?Nullable<type>?
質問
C# では、null 許容のプリミティブ型 (つまり、 bool?
) 対応するエイリアスにすぎません Nullable<T>
タイプですか、それとも両者に違いはありますか?
解決
を使用してILを見ると、 イルダズム, 、両方ともコンパイルすると次のようになります。 Nullable<bool>
.
他のヒント
違いはありません bool? b = null
そして Nullable<bool> b = null
. 。の ?
は単なる C# コンパイラ構文の砂糖です。
ブール値にアクセスするには?次のことを行う必要があります。
bool? myValue = true;
bool hasValue = false;
if (myValue.HasValue && myValue.Value)
{
hasValue = true;
}
次のようにすることはできないことに注意してください。
if (myValue)
{
hasValue = true;
}
まだ誰もソース (C# 仕様) にアクセスしていないことに驚きました。§4.1.10 Null 許容型より:
Null 許容型は T? と書かれます (T は基になる型です)。この構文は System.Nullable<T> の短縮形であり、2 つの形式は区別なく使用できます。
したがって、いいえ、2 つの形式の間に違いはありません。(他のタイプがないと仮定すると、 Nullable<T>
使用する名前空間のいずれかで。)
あ Nullable<T>
は、TとそのTが有効かどうかを示すビットフラグからなる構造体です。あ Nullable<bool>
可能な値は次の 3 つです。true、false、null。
編集: ああ、「bool」の後の疑問符は実際には型名の一部であり、質問していることを示すものではないという事実を見逃していました :)。したがって、あなたの質問に対する答えは、「はい、C# です」です。 bool?
は単なるエイリアスです Nullable<bool>
".
あ bool
は値型であるため、NULL 値を含めることはできません。値の型を次のようにラップすると、 Nullable<>
, 、その能力を与えます。また、追加プロパティにより値へのアクセス方法が変わります HasValue
そして Value
.
しかし、質問には次のようになります。 Nullable<bool>
そして bool?
は別名です。
いいえ、違いはありません。要約すれば:
System.Boolean -> 有効な値:真/偽
bool -> System.Boolean のエイリアス
Nullable<bool> -> 有効な値:true、false、null
ブール?-> Nullable<bool> のエイリアス
お役に立てれば。
Null プリミティブは、Nullable でラップされた通常のプリミティブです。これとは反対の外観は、単なるコンパイラと構文糖です。
変わりはない。ここを見てください: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
「構文T?は Nullable の短縮形であり、T は値の型です。2つの形態は交換可能です。」