Try/catch keeps a handled exception from crashing the program.

try catch A `catch` block handles an exception thrown inside a `try` block.

Try Catch

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

class Program
{
    static void Main()
    {
        string text = "42";
        int value = 0;
        string status = "ok";

        try
        {
            value = int.Parse(text);
        }
        catch (FormatException)
        {
            status = "invalid";
        }

        Console.WriteLine($"text={text}");
        Console.WriteLine($"status={status}");
        Console.WriteLine($"value={value}");
    }
}
using System;

class Program
{
    static void Main()
    {
        string text = "bad";
        int value = 0;
        string status = "ok";

        try
        {
            value = int.Parse(text);
        }
        catch (FormatException)
        {
            status = "invalid";
        }

        Console.WriteLine($"text={text}");
        Console.WriteLine($"status={status}");
        Console.WriteLine($"value={value}");
    }
}
using System;

class Program
{
    static void Main()
    {
        string text = "7";
        int value = 0;
        string status = "ok";

        try
        {
            value = int.Parse(text);
        }
        catch (FormatException)
        {
            status = "invalid";
        }

        Console.WriteLine($"text={text}");
        Console.WriteLine($"status={status}");
        Console.WriteLine($"value={value}");
    }
}
  1. text ← 42, value ← 0, status ← ok

    4{5    static void Main()6    {7        string text→ 42 = "42"; //@text="bad", "7"8        int value→ 0 = 0;9        string status→ ok = "ok";
  2. value ← 42

    11try12{13    value→ 42 = int.Parse(text42);14}
  3. Console.WriteLine($"text={text}");

    20    Console.WriteLine($"text={text42}");21    Console.WriteLine($"status={statusok}");22    Console.WriteLine($"value={value42}");23}
    outputtext=42
    status=ok
    value=42
  1. text ← bad, value ← 0, status ← ok

    4{5    static void Main()6    {7        string text→ bad = "bad";8        int value→ 0 = 0;9        string status→ ok = "ok";
  2. try

    11try12{13    value = int.Parse(textbad);14}
  3. status ← invalid

    14}15catch (FormatException)16{17    status→ invalid = "invalid";18}
  4. Console.WriteLine($"text={text}");

    20    Console.WriteLine($"text={textbad}");21    Console.WriteLine($"status={statusinvalid}");22    Console.WriteLine($"value={value0}");23}
    outputtext=bad
    status=invalid
    value=0
  1. text ← 7, value ← 0, status ← ok

    4{5    static void Main()6    {7        string text→ 7 = "7";8        int value→ 0 = 0;9        string status→ ok = "ok";
  2. value ← 7

    11try12{13    value→ 7 = int.Parse(text7);14}
  3. Console.WriteLine($"text={text}");

    20    Console.WriteLine($"text={text7}");21    Console.WriteLine($"status={statusok}");22    Console.WriteLine($"value={value7}");23}
    outputtext=7
    status=ok
    value=7