Exceptions and Defensive Coding
Null Checks
A null check chooses a fallback before using a missing nullable value.
null check
A null check protects code before reading from a value that might be missing.
Null Checks
NullChecks.cs
Replay: real traced execution (multi-file project)
using System;
class Program
{
static string DisplayScore(int? score)
{
if (!score.HasValue)
{
return "missing";
}
return "score:" + score.Value;
}
static void Main()
{
int? score = 12;
string display = DisplayScore(score);
Console.WriteLine($"hasScore={score.HasValue}");
Console.WriteLine($"display={display}");
}
}
using System;
class Program
{
static string DisplayScore(int? score)
{
if (!score.HasValue)
{
return "missing";
}
return "score:" + score.Value;
}
static void Main()
{
int? score = null;
string display = DisplayScore(score);
Console.WriteLine($"hasScore={score.HasValue}");
Console.WriteLine($"display={display}");
}
}
using System;
class Program
{
static string DisplayScore(int? score)
{
if (!score.HasValue)
{
return "missing";
}
return "score:" + score.Value;
}
static void Main()
{
int? score = 20;
string display = DisplayScore(score);
Console.WriteLine($"hasScore={score.HasValue}");
Console.WriteLine($"display={display}");
}
}
score ← 12
15static void Main()16{17 int? score→ 12 = 12; //@score=null, 2018 string display = DisplayScore(score12);static string DisplayScore(int? score)
4{5 static string DisplayScore(int? score12)6 {7 if (!score.HasValue)8 {9 return "missing";10 }1112 return "score:" + score.Value12;13 }display ← score:12
17 int? score = 12; //@score=null, 2018 string display→ score:12 = DisplayScore(score12);1920 Console.WriteLine($"hasScore={score.HasValueTrue}");21 Console.WriteLine($"display={displayscore:12}");22}outputhasScore=True display=score:12
score ← (empty)
15static void Main()16{17 int? score→ (empty) = null;18 string display = DisplayScore(score(empty));static string DisplayScore(int? score)
4{5 static string DisplayScore(int? score(empty))6 {7 if (!score.HasValue)if (!score.HasValue)
6{7 if (!score.HasValueFalse)8 {9 return "missing";10 }display ← missing
17 int? score = null;18 string display→ missing = DisplayScore(score(empty));1920 Console.WriteLine($"hasScore={score.HasValueFalse}");21 Console.WriteLine($"display={displaymissing}");22}outputhasScore=False display=missing
score ← 20
15static void Main()16{17 int? score→ 20 = 20;18 string display = DisplayScore(score20);static string DisplayScore(int? score)
4{5 static string DisplayScore(int? score20)6 {7 if (!score.HasValue)8 {9 return "missing";10 }1112 return "score:" + score.Value20;13 }display ← score:20
17 int? score = 20;18 string display→ score:20 = DisplayScore(score20);1920 Console.WriteLine($"hasScore={score.HasValueTrue}");21 Console.WriteLine($"display={displayscore:20}");22}outputhasScore=True display=score:20