Data Types
Nullable Values
A nullable value type can hold either a value or null.
nullable
A nullable value type uses `?`, such as `int?`, to allow `null`.
Nullable Values
NullableValues.cs
Replay: real traced execution (multi-file project)
using System;
class Program
{
static void Main()
{
int? score = 90;
string status = score.HasValue ? "has score" : "missing";
int displayed = score ?? 0;
Console.WriteLine($"status={status}");
Console.WriteLine($"displayed={displayed}");
}
}
using System;
class Program
{
static void Main()
{
int? score = null;
string status = score.HasValue ? "has score" : "missing";
int displayed = score ?? 0;
Console.WriteLine($"status={status}");
Console.WriteLine($"displayed={displayed}");
}
}
using System;
class Program
{
static void Main()
{
int? score = 75;
string status = score.HasValue ? "has score" : "missing";
int displayed = score ?? 0;
Console.WriteLine($"status={status}");
Console.WriteLine($"displayed={displayed}");
}
}
score ← 90, status ← has score, displayed ← 90
4{5 static void Main()6 {7 int? score→ 90 = 90; //@score=null, 758 string status→ has score = score.HasValueTrue ? "has score" : "missing";9 int displayed→ 90 = score90 ?? 0;1011 Console.WriteLine($"status={statushas score}");12 Console.WriteLine($"displayed={displayed90}");13 }outputstatus=has score displayed=90
score ← (empty), status ← missing, displayed ← 0
4{5 static void Main()6 {7 int? score→ (empty) = null;8 string status→ missing = score.HasValueFalse ? "has score" : "missing";9 int displayed→ 0 = score(empty) ?? 0;1011 Console.WriteLine($"status={statusmissing}");12 Console.WriteLine($"displayed={displayed0}");13 }outputstatus=missing displayed=0
score ← 75, status ← has score, displayed ← 75
4{5 static void Main()6 {7 int? score→ 75 = 75;8 string status→ has score = score.HasValueTrue ? "has score" : "missing";9 int displayed→ 75 = score75 ?? 0;1011 Console.WriteLine($"status={statushas score}");12 Console.WriteLine($"displayed={displayed75}");13 }outputstatus=has score displayed=75
Follow the Nullable Value
scorestarts as90.score.HasValueis true.statusbecomeshas score.displayed = score ?? 0becomes90.- The program prints
status=has scoreanddisplayed=90. | score | status | displayed | | --- | --- | --- | | null | missing | 0 | | 75 | has score | 75 | | 90 | has score | 90 |
Exercise: NullableValues.cs
Reproduce displayed=90, then use score null and 75 to predict status and displayed.