Bird
Raised Fist0
C Sharp (C#)programming~10 mins

Multiple catch blocks in C Sharp (C#) - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Multiple catch blocks
Try block starts
Code runs
Exception thrown?
NoTry block ends normally
Yes
Check first catch block type
Matches
Run catch
Catch block ends
Continue after try-catch
The program tries code in the try block. If an error happens, it checks each catch block in order to find one matching the error type and runs it.
Execution Sample
C Sharp (C#)
try {
  int x = int.Parse("abc");
} catch (FormatException) {
  Console.WriteLine("Format error");
} catch (Exception) {
  Console.WriteLine("General error");
}
This code tries to convert a string to a number. If it fails with a format error, it prints "Format error". For other errors, it prints "General error".
Execution Table
StepActionException Thrown?Catch Block CheckedCatch Block Matches?Output
1Enter try block, execute int.Parse("abc")Yes: FormatExceptionFormatException catchYes
2Run FormatException catch blockNoFormat error
3Exit try-catch, continue programNo
💡 Exception FormatException caught by first catch block, program continues after try-catch.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
xundefinedException thrown, x not assignedNot assignedNot assigned
Key Moments - 2 Insights
Why does the first catch block run instead of the second?
Because the exception thrown is FormatException, which matches the first catch block type exactly (see execution_table step 1). The second catch block is for general Exception and is skipped.
What happens if no catch block matches the exception?
The exception is unhandled and the program crashes or moves to a higher-level handler. In this example, all exceptions are caught by the two catch blocks, so this does not happen.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which catch block handles the exception?
AThe first catch block for FormatException
BThe second catch block for Exception
CNo catch block handles it
DBoth catch blocks handle it
💡 Hint
See execution_table row 1 and 2 where FormatException catch block matches and runs.
At which step does the program output "Format error"?
AStep 1
BStep 2
CStep 3
DNo output is produced
💡 Hint
Check execution_table row 2 where the catch block runs and prints output.
If the thrown exception was NullReferenceException, which catch block would run?
AFormatException catch block
BException catch block
CNo catch block
DBoth catch blocks
💡 Hint
NullReferenceException is a general Exception but not FormatException, so second catch block matches.
Concept Snapshot
try {
  // code that may throw
} catch (SpecificException) {
  // handle specific error
} catch (Exception) {
  // handle other errors
}

- Multiple catch blocks checked in order
- First matching catch runs
- Program continues after catch
Full Transcript
This example shows how multiple catch blocks work in C#. The program tries to run code inside the try block. If an error happens, it looks at each catch block in order. If the error type matches the catch block type, that block runs. In the example, parsing "abc" to int throws a FormatException. The first catch block matches this type and runs, printing "Format error". The second catch block is skipped. After the catch block finishes, the program continues normally. If no catch block matches, the program would crash or look for a higher-level handler. This shows how you can handle different errors differently by using multiple catch blocks.

Practice

(1/5)
1.

What is the main purpose of using multiple catch blocks in C#?

easy
A. To avoid using try blocks
B. To handle different types of exceptions separately
C. To make the code run faster
D. To declare multiple variables

Solution

  1. Step 1: Understand the role of catch blocks

    catch blocks are used to handle errors that happen in the try block.
  2. Step 2: Recognize why multiple catch blocks are used

    Using multiple catch blocks lets you respond differently to different error types, making your program clearer and safer.
  3. Final Answer:

    To handle different types of exceptions separately -> Option B
  4. Quick Check:

    Multiple catch blocks = handle different exceptions [OK]
Hint: Multiple catch blocks handle different errors separately [OK]
Common Mistakes:
  • Thinking multiple catch blocks speed up code
  • Believing catch blocks replace try blocks
  • Using catch blocks to declare variables
2.

Which of the following is the correct syntax order for multiple catch blocks in C#?

try { ... }
catch (ArgumentNullException e) { ... }
catch (Exception e) { ... }
easy
A. Specific exceptions first, general exceptions last
B. General exceptions first, specific exceptions last
C. Order does not matter
D. Only one catch block is allowed

Solution

  1. Step 1: Understand exception hierarchy

    Specific exceptions like ArgumentNullException inherit from general exceptions like Exception.
  2. Step 2: Order catch blocks correctly

    Place specific exceptions first so they catch their errors before the general catch block handles all others.
  3. Final Answer:

    Specific exceptions first, general exceptions last -> Option A
  4. Quick Check:

    Specific before general catch blocks [OK]
Hint: Put specific exceptions before general ones in catch blocks [OK]
Common Mistakes:
  • Placing general catch before specific causes unreachable code
  • Assuming catch order does not matter
  • Trying to use multiple catch blocks without try
3.

What will be the output of this C# code?

try {
    int[] arr = new int[2];
    Console.WriteLine(arr[5]);
} catch (IndexOutOfRangeException) {
    Console.WriteLine("Index error caught");
} catch (Exception) {
    Console.WriteLine("General error caught");
}
medium
A. No output, program crashes
B. General error caught
C. Index error caught
D. Compilation error

Solution

  1. Step 1: Identify the exception thrown

    Accessing arr[5] causes an IndexOutOfRangeException because the array size is 2.
  2. Step 2: Match exception to catch block

    The first catch block matches IndexOutOfRangeException, so it runs and prints "Index error caught".
  3. Final Answer:

    Index error caught -> Option C
  4. Quick Check:

    IndexOutOfRangeException triggers first catch [OK]
Hint: Exception type matches first suitable catch block [OK]
Common Mistakes:
  • Thinking general catch runs before specific
  • Assuming no exception occurs
  • Confusing exception types
4.

Find the error in this code snippet:

try {
    int x = int.Parse("abc");
} catch (Exception e) {
    Console.WriteLine("General error");
} catch (FormatException e) {
    Console.WriteLine("Format error");
}
medium
A. The FormatException catch block is unreachable
B. Missing finally block
C. Try block syntax is incorrect
D. No error, code is correct

Solution

  1. Step 1: Check catch block order

    The first catch block catches all Exception types, including FormatException.
  2. Step 2: Identify unreachable catch block

    Since Exception catch is first, the FormatException catch block can never run, causing a compile error.
  3. Final Answer:

    The FormatException catch block is unreachable -> Option A
  4. Quick Check:

    General catch before specific causes unreachable code [OK]
Hint: Place specific catch blocks before general ones to avoid unreachable code [OK]
Common Mistakes:
  • Putting general catch before specific
  • Ignoring unreachable code errors
  • Thinking finally block is mandatory
5.

You want to handle NullReferenceException and DivideByZeroException differently, but also catch any other exceptions generally. Which is the best order of catch blocks?

try {
    // code that may throw exceptions
} catch (___) {
    Console.WriteLine("Null reference error");
} catch (___) {
    Console.WriteLine("Divide by zero error");
} catch (___) {
    Console.WriteLine("Other error");
}
hard
A. Exception, DivideByZeroException, NullReferenceException
B. Exception, NullReferenceException, DivideByZeroException
C. DivideByZeroException, Exception, NullReferenceException
D. NullReferenceException, DivideByZeroException, Exception

Solution

  1. Step 1: Identify specific exceptions

    NullReferenceException and DivideByZeroException are specific exceptions to catch first.
  2. Step 2: Place general exception last

    The general Exception catch block should come last to catch all other exceptions.
  3. Final Answer:

    NullReferenceException, DivideByZeroException, Exception -> Option D
  4. Quick Check:

    Specific exceptions first, general last [OK]
Hint: Catch specific exceptions before general Exception last [OK]
Common Mistakes:
  • Putting Exception catch first
  • Mixing order of specific exceptions
  • Omitting general catch block