どのようにアクセスできますnull nullableのpropery HasValue
?
私はコンパイルされたコードを見ましたが、それは構文的な砂糖ではありません。そう、あなたがNullReferenceException
を得ることはありません - int?
が値型ではなく、参照型であるNullable<int>
ための短いため'。'演算子null nullable
int? x = null;
if (x.HasValue)
{...}
どのようにアクセスできますnull nullableのpropery HasValue
?
私はコンパイルされたコードを見ましたが、それは構文的な砂糖ではありません。そう、あなたがNullReferenceException
を得ることはありません - int?
が値型ではなく、参照型であるNullable<int>
ための短いため'。'演算子null nullable
int? x = null;
if (x.HasValue)
{...}
です:これはとNullReferenceExceptionをスローしませんなぜ
。
Nullable<T>
構造体は、このようなものになります。あなたがnull
を割り当てるときだけ設定します(約Nullable<T>
を知っているし、このように特別扱います)コンパイラによってサポートで起こっていくつかの魔法がある
public struct Nullable<T> where T : struct
{
private readonly T value;
private readonly bool hasValue;
//..
}
をhasValue
このインスタンスのフィールドはfalseに設定され、HasValue
プロパティによって返されます。
BrokenGlassと同様に、int?
は、実際にはNullable<T>
です。
構造体には常に値が含まれます。通常、構造変数をnullに設定することはできませんが、この特別な場合は基本的にはdefault(Nullable<T>)
に設定します。これにより、変数自体ではなく内容がnullに設定されます。
Nullable<T>
を値に設定すると、暗黙の演算子を使用してValue = value
を新しい値に設定し、HasValue = true
に設定します。
Nullable<T>
をnullに設定すると、構造体のすべてのフィールドがNULLになります。例えばHasValue
のようなbool
フィールドの場合、null == false
。
変数は構造体なので、変数自体ではなく内容がnullであるため、変数は常に参照できます。
構造に関する詳細は、MSDNページstructの「備考」セクションを参照してください。
"構造変数をnullに設定すると、その内容は変数自体ではなくヌルに設定されます。これは間違っています。値型/ structに 'null 'を代入することはできません.' Nullable
@BrokenGlass、そうです。私はVB.Netに慣れていて、現在自分自身にC#を教えています。 VBでは、 'Dim x As SomeStructure = Nothing'を割り当てることができます。私はこれが 'SomeStructure x = null'ではなく' SomeStructure x = default(SomeStructure) 'と同じことを推測しています。 –
@ Hand-E-Food、C#(+ VB)へのあなたの答えを更新してみませんか? – gdoron
追加、構造体にnullが割り当てられませんでした。 –