C#では、int?
型のクラスインスタンス変数のデフォルト値は何ですか?
たとえば、次のコードでは、明示的に割り当てられない場合、MyNullableInt
はどの値になりますか?
class MyClass
{
public int? MyNullableInt;
}
(答えはほぼ確実にnull
または0
のいずれかである可能性が高いようですが、それはどれですか?)
int?
のデフォルト値-および「タイプ?」を使用するNULL可能タイプのデフォルト値宣言-null
です。
なぜそうなのか:
int?
は、構造体の型 Nullable <T> (Tはint
)の構文糖衣です。 ( 参照 )Nullable<T>
型には bool HasValue メンバーがあり、これはfalse
のときにNullable<T>
インスタンスをnull
値のように動作させます。特に、 Nullable <T> .Equalsメソッド は、Nullable<T>
with HasValue == false
が実際のtrue
値と比較されるときに、null
を返すようにオーバーライドされます。null
に設定されます。bool
変数のデフォルト値はfalse
(- reference )です。したがって、デフォルトのNullable<T>
インスタンスのHasValue
プロパティはfalse
です。これにより、Nullable<T>
インスタンス自体がnull
のように動作します。Nullable<int>
aka int?
の値を使用する数学計算を扱うときに特に便利なNullable<T>.GetValueOrDefault()
メソッドを共有することが重要だと感じました。 HasValue
プロパティをチェックする必要がない場合が多く、代わりにGetValueOrDefault()
を使用できます。
var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());
var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);
Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());