52

C# では、null 可能なプリミティブ型 (つまりbool?) は、対応する型の単なるエイリアスNullable<T>ですか、それとも 2 つに違いはありますか?

4

9 に答える 9

67

Ildasmを使用して IL を見ると、どちらもコンパイルされてNullable<bool>.

于 2008-09-11T13:36:33.017 に答える
38

bool? b = nullと の間に違いはありませんNullable<bool> b = null。これ?は単なる C# コンパイラの構文糖衣です。

于 2008-09-11T13:29:48.027 に答える
18

ブール値にアクセスするには? 次のことを行う必要があります。

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

ただできないことに注意してください:

if (myValue)
{
  hasValue = true;
}
于 2008-09-11T13:31:10.130 に答える
9

まだ誰もソース (C# 仕様) にアクセスしていないことに驚いています。§4.1.10 Nullable 型から:

null 許容型は T? と記述されます。ここで、T は基になる型です。この構文は System.Nullable<T> の省略形であり、2 つの形式は同じ意味で使用できます。

いいえ、2 つの形式に違いはありません。Nullable<T>(使用する名前空間のいずれかで呼び出される他の型がないことを前提としています。)

于 2013-01-30T17:28:27.200 に答える
6

ANullable<T>は、T と、T が有効かどうかを示すビット フラグから構成される構造体です。ANullable<bool>には、true、false、および null の 3 つの可能な値があります。

編集:ああ、「bool」の後の疑問符が実際にはタイプ名の一部であり、質問をしていることを示すものではないという事実を見逃しました:)。あなたの質問に対する答えは、「はい、C#bool?は単なるエイリアスですNullable<bool>」です。

于 2008-09-11T13:26:42.573 に答える
4

Aboolは値型であるため、NULL 値を含めることはできません。値型を でラップするとNullable<>、その機能が付与されます。また、プロパティHasValueやプロパティを追加することで、値へのアクセス方法が変わりますValue

しかし、質問に:Nullable<bool>bool?はエイリアスです。

于 2008-09-11T13:28:26.407 に答える
2

いいえ違いはありません。要約すれば:

System.Boolean -> 有効な値: true、false

bool -> System.Boolean のエイリアス

Nullable<bool> -> 有効な値: true、false、null

ブール?-> Nullable<bool> のエイリアス

お役に立てれば。

于 2008-09-11T13:36:35.637 に答える
1

Null プリミティブは、Nullable でラップされた単なる通常のプリミティブです。反対の外観は、コンパイラと構文糖衣にすぎません。

于 2008-09-11T13:27:56.987 に答える
0

変わりはない。こちらをご覧ください: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

「構文 T? は、T が値の型である Nullable の省略形です。2 つの形式は交換可能です。」

于 2015-01-07T16:55:39.140 に答える