C# では、null 可能なプリミティブ型 (つまりbool?
) は、対応する型の単なるエイリアスNullable<T>
ですか、それとも 2 つに違いはありますか?
9 に答える
Ildasmを使用して 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 Nullable 型から:
null 許容型は T? と記述されます。ここで、T は基になる型です。この構文は System.Nullable<T> の省略形であり、2 つの形式は同じ意味で使用できます。
いいえ、2 つの形式に違いはありません。Nullable<T>
(使用する名前空間のいずれかで呼び出される他の型がないことを前提としています。)
ANullable<T>
は、T と、T が有効かどうかを示すビット フラグから構成される構造体です。ANullable<bool>
には、true、false、および null の 3 つの可能な値があります。
編集:ああ、「bool」の後の疑問符が実際にはタイプ名の一部であり、質問をしていることを示すものではないという事実を見逃しました:)。あなたの質問に対する答えは、「はい、C#bool?
は単なるエイリアスですNullable<bool>
」です。
Abool
は値型であるため、NULL 値を含めることはできません。値型を でラップするとNullable<>
、その機能が付与されます。また、プロパティHasValue
やプロパティを追加することで、値へのアクセス方法が変わりますValue
。
しかし、質問に:Nullable<bool>
とbool?
はエイリアスです。
いいえ違いはありません。要約すれば:
System.Boolean -> 有効な値: true、false
bool -> System.Boolean のエイリアス
Nullable<bool> -> 有効な値: true、false、null
ブール?-> Nullable<bool> のエイリアス
お役に立てれば。
Null プリミティブは、Nullable でラップされた単なる通常のプリミティブです。反対の外観は、コンパイラと構文糖衣にすぎません。
変わりはない。こちらをご覧ください: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
「構文 T? は、T が値の型である Nullable の省略形です。2 つの形式は交換可能です。」