Wat is in C# de standaardwaarde van een instantievariabele van het type int?
?
Welke waarde heeft MyNullableInt
in de volgende code als deze nooit expliciet wordt toegewezen?
class MyClass
{
public int? MyNullableInt;
}
(Het lijkt waarschijnlijk dat het antwoord vrijwel zeker null
of 0
is, maar welke daarvan is het?)
Antwoord 1, autoriteit 100%
De standaardwaarde voor int?
— en voor elk nullable-type dat het “type?” declaratie — is null
.
Waarom dit het geval is:
int?
is syntactische suiker voor het type Nullable<T>(waarbij Tint
is), een struct. (referentie)- Het type
Nullable<T>
heeft een bool HasValuemember, die, wanneerfalse
, deNullable<T>
instantie “doet alsof” eennull
waarde. Met name de Nullable<T>.Equals-methodewordt overschreven omtrue
wanneer eenNullable<T>
metHasValue == false
wordt vergeleken met een werkelijkenull
-waarde. - Van de C#-taalspecificatie 11.3.4, De initiële standaardwaarde van een struct-instantie zijn alle velden van het waardetype van die struct die zijn ingesteld op hun standaardwaarde, en alle velden van het referentietype van die struct zijn ingesteld op
null
. - De standaardwaarde van een
bool
-variabele in C# isfalse
(referentie). Daarom is de eigenschapHasValue
van een standaardNullable<T>
-instantiefalse
; waardoor dieNullable<T>
instantie zelf zich gedraagt alsnull
.
Antwoord 2, autoriteit 25%
Ik vond het belangrijk om de Nullable<T>.GetValueOrDefault()
methode te delen, wat vooral handig is bij het werken met wiskundige berekeningen die gebruik maken van Nullable<int>
oftewel int?
waarden. Het komt vaak voor dat u de eigenschap HasValue
niet hoeft aan te vinken en in plaats daarvan GetValueOrDefault()
kunt gebruiken.
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());
Antwoord 3
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());