Wat is de standaardwaarde van het nullable-type “int?” (inclusief vraagteken)?

Wat is in C# de standaardwaarde van een instantievariabele van het type int??

Welke waarde heeft MyNullableIntin de volgende code als deze nooit expliciet wordt toegewezen?

class MyClass
{
    public int? MyNullableInt;
}

(Het lijkt waarschijnlijk dat het antwoord vrijwel zeker nullof 0is, 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 T intis), een struct. (referentie)
  • Het type Nullable<T>heeft een bool HasValuemember, die, wanneer false, de Nullable<T>instantie “doet alsof” een nullwaarde. Met name de Nullable<T>.Equals-methodewordt overschreven om truewanneer een Nullable<T>met HasValue == falsewordt vergeleken met een werkelijke null-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# is false(referentie). Daarom is de eigenschap HasValuevan een standaard Nullable<T>-instantie false; waardoor die Nullable<T>instantie zelf zich gedraagt ​​als null.

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 HasValueniet 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());

Opdrachtregel die de bovenstaande code laat zien


Antwoord 3

var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());

Other episodes