C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Here: The program throws an exception 3 times. DivideByZero causes exceptions. Int.Parse prevents the compiler from spotting the error.
DivideByZeroExceptionint.ParseThen: Three lines are written to screen. These numbers indicate what catch blocks were executed in the control flow.
ConsoleVariable: After the catch keyword, we use parentheses to declare an exception variable. This variable can optionally be named.
Note: In the third example, we have more than one catch block in a row. The most general catch comes last.
C# program that uses catch blocks
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;
}
}
Output
0
1
2
Tip: We can stack "when" catch clauses. In this program we catch the ArgumentException in multiple ways.
C# program that uses catch, when, filters exceptions
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");
}
}
}
Output
X