An is pattern checks a value's shape and creates a typed local variable.

is pattern An `is` pattern checks a value and extracts a usable variable.

Pattern Is

value
PatternIs.cs
Replay: real traced execution (multi-file project)
using System;

class Program
{
    static void Main()
    {
        object value = 42;
        string result;

        if (value is int number)
        {
            result = "int:" + (number * 2);
        }
        else
        {
            result = "other:" + value;
        }

        Console.WriteLine($"result={result}");
    }
}
using System;

class Program
{
    static void Main()
    {
        object value = 7;
        string result;

        if (value is int number)
        {
            result = "int:" + (number * 2);
        }
        else
        {
            result = "other:" + value;
        }

        Console.WriteLine($"result={result}");
    }
}
using System;

class Program
{
    static void Main()
    {
        object value = "text";
        string result;

        if (value is int number)
        {
            result = "int:" + (number * 2);
        }
        else
        {
            result = "other:" + value;
        }

        Console.WriteLine($"result={result}");
    }
}
  1. value ← 42

    4{5    static void Main()6    {7        object value→ 42 = 42; //@value=7, "text"8        string result;
  2. result ← int:84

    10if (value42 is int number)11{12    result→ int:84 = "int:" + (number42 * 2);13}
  3. Console.WriteLine($"result={result}");

    19    Console.WriteLine($"result={resultint:84}");20}
    outputresult=int:84
  1. value ← 7

    4{5    static void Main()6    {7        object value→ 7 = 7;8        string result;
  2. result ← int:14

    10if (value7 is int number)11{12    result→ int:14 = "int:" + (number7 * 2);13}
  3. Console.WriteLine($"result={result}");

    19    Console.WriteLine($"result={resultint:14}");20}
    outputresult=int:14
  1. value ← text

    4{5    static void Main()6    {7        object value→ text = "text";8        string result;
  2. result ← other:text

    13}14else15{16    result→ other:text = "other:" + valuetext;17}
  3. Console.WriteLine($"result={result}");

    19    Console.WriteLine($"result={resultother:text}");20}
    outputresult=other:text