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)