? og ??

Hva kan man gjøre om man ikke vet hvilken verdi man skal gi til en int, double, bool, o.s.v., altså en verditype? Verdityper kan jo ikke settes til null .. :

bool suksess = null;
// gir kompilatorfeil: "Cannot convert 'null' to bool because it is a non-nullable value type"

Løsningen kan være Nullable<T> (hvor T erstattes med int, double, bool, o.s.v.). Dette blir da som en innpakket verditype som også kan settes til null.

Ikke trenger man engang å skrive Nullable<T>, C# tilbyr ? som er et slags suffiks:

bool? test = null;
if (!test.HasValue)
{
   Console.WriteLine("en bool? satt til null,");
   test = true;
   if (test.Value) Console.WriteLine("og så true slik bool også kan gjøres");
}
// skriver ut:
// en bool? satt til null,
// og så true slik bool også kan gjøres
int? tall = null;
if (!tall.HasValue)
{
   Console.WriteLine("en int? satt til null,");
   tall = 666;
   Console.WriteLine("og så {0} slik int også kan gjøres", tall.Value);
}
// skriver ut:
// en int? satt til null,
// og så 666 slik int også kan gjøres

Her opprettes det først en nullable bool, så en nullable int. Begge brukes omtrent som om de skulle vært vanlige verdityper.

Man kan også med enkelhet angi en reserveverdi i tilfelle man støter på null:

int databaseVerdi1 = verdiFraDatabase() ?? 1337; // hvor verdiFraDatabase() her gir null
Console.WriteLine("Verdi fra database: " + databaseVerdi1);
// skriver ut: 'Verdi fra database: 1337' 

.. hvis ikke er man nødt til å bruke en nullable verditype i stedet for:

int? databaseVerdi2 = verdiFraDatabase(); // hvor verdiFraDatabase() her gir null
Console.WriteLine("Kanskje en verdi fra database: " + databaseVerdi2);
// skriver ut: 'Kanskje en verdi fra database: '
// (tomrom på slutten fordi databaseVerdi2 er null)

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.