In catch we handle exceptions. An alternative flow, the try-catch
pattern traps errors, separating them in a clear way. Programs written in C# become easier to read.
The catch
-block allows an optional variable. Multiple catch
-blocks can be stacked to provide more control. And "when" can filter exceptions.
This program shows 3 patterns of using try-catch
blocks. Please notice the syntaxes used in the catch
-blocks. We catch exceptions in different ways.
DivideByZero
causes exceptions. Int.Parse
prevents the compiler from spotting the error.catch
-blocks were executed in the control flow.catch
-keyword, we use parentheses to declare an exception variable. This variable can optionally be named.catch
-block in a row. The most general catch comes last.using System; class Program { static void Main() { // You can use an empty catch block. try { DivideByZero(); } catch { Console.WriteLine("0"); } // You can specify a variable in the catch. try { DivideByZero(); } catch (Exception ex) { Console.WriteLine("1"); } // You can use multiple catch blocks. try { DivideByZero(); } catch (DivideByZeroException) { Console.WriteLine("2"); } catch { Console.WriteLine("3"); } } static int DivideByZero() { int value1 = 1; int value2 = int.Parse("0"); return value1 / value2; } }0 1 2
With the when
-keyword, we filter exceptions. A condition (like one found in an if
-statement) is the argument to when. This reduces complex logic in exception catch
-blocks.
catch
-clauses. In this program we catch the ArgumentException
in multiple ways.using System;
class Program
{
static void Main()
{
try
{
throw new ArgumentException("Invalid x argument");
}
catch (ArgumentException ex) when (ex.Message == "Invalid x argument")
{
// This is reached.
Console.WriteLine("X");
}
catch (ArgumentException ex) when (ex.Message == "Invalid y argument")
{
// This is not reached.
// ... Change the string to have "y" and it will be reached.
Console.WriteLine("Y");
}
}
}X
In complex programs, exception handling is helpful. Catch is a key part of exception handling. By going outside of the control flow, we more easily trap unexpected conditions.