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

score
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}");
    }
}
  1. score ← 12

    15static void Main()16{17    int? score→ 12 = 12; //@score=null, 2018    string display = DisplayScore(score12);
  2. 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    }
  3. 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
  1. score ← (empty)

    15static void Main()16{17    int? score→ (empty) = null;18    string display = DisplayScore(score(empty));
  2. static string DisplayScore(int? score)

    4{5    static string DisplayScore(int? score(empty))6    {7        if (!score.HasValue)
  3. if (!score.HasValue)

    6{7    if (!score.HasValueFalse)8    {9        return "missing";10    }
  4. 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
  1. score ← 20

    15static void Main()16{17    int? score→ 20 = 20;18    string display = DisplayScore(score20);
  2. 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    }
  3. 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