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

Exception hierarchy in .NET 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 - Exception hierarchy in .NET
Start: Exception occurs
Is it a System.Exception?
Is it SystemException?
Specific Exception Type
Catch or Propagate
End
When an error happens, .NET checks if it is an Exception, then narrows down to SystemException or ApplicationException, then to specific types, deciding how to handle it.
Execution Sample
C Sharp (C#)
try {
  throw new ArgumentNullException("param");
} catch (Exception e) {
  Console.WriteLine(e.GetType().Name);
}
Throws an ArgumentNullException and catches it as Exception, printing its type name.
Execution Table
StepActionException TypeResultOutput
1Throw new ArgumentNullExceptionArgumentNullExceptionException thrown
2Catch block checks ExceptionArgumentNullExceptionCaught by Exception catch
3Print exception type nameArgumentNullExceptionPrintedArgumentNullException
4End of try-catch--Program continues
💡 Exception caught and handled, program continues normally
Variable Tracker
VariableStartAfter ThrowAfter CatchFinal
enullArgumentNullException instanceArgumentNullException instanceArgumentNullException instance
Key Moments - 2 Insights
Why does the catch block catch ArgumentNullException when it says catch(Exception e)?
Because ArgumentNullException inherits from Exception, so catch(Exception e) catches all exceptions derived from Exception as shown in execution_table step 2.
What is the difference between SystemException and ApplicationException?
SystemException is for system errors (like ArgumentNullException), ApplicationException is for user-defined exceptions. The hierarchy narrows exceptions into these categories as in concept_flow.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output printed at step 3?
AException
BArgumentNullException
CNullReferenceException
DNo output
💡 Hint
Check the Output column at step 3 in execution_table
At which step does the exception get caught?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look at the Result column in execution_table where it says 'Caught by Exception catch'
If we throw a custom exception inheriting from ApplicationException, which catch block would catch it?
AOnly catch(ApplicationException e)
BOnly catch(SystemException e)
Ccatch(Exception e)
DNo catch block
💡 Hint
Refer to concept_flow and key_moments about inheritance and catch blocks
Concept Snapshot
Exception hierarchy in .NET:
- Base: System.Exception
- Two main branches: SystemException (system errors), ApplicationException (user-defined)
- Specific exceptions inherit from these
- catch(Exception e) catches all exceptions
- Use specific catches for finer control
Full Transcript
In .NET, exceptions form a hierarchy starting from System.Exception. When an error occurs, the runtime checks if it is an Exception, then narrows down to SystemException or ApplicationException, and then to specific exception types like ArgumentNullException. In the example, throwing ArgumentNullException is caught by a catch block for Exception because ArgumentNullException inherits from Exception. This shows how catch blocks can catch exceptions of derived types. SystemException is for system errors, ApplicationException for user-defined errors. Understanding this hierarchy helps write better error handling code.

Practice

(1/5)
1. Which class is the base class for all exceptions in .NET?
easy
A. System.Error
B. System.Exception
C. System.ApplicationException
D. System.SystemException

Solution

  1. Step 1: Understand the exception hierarchy

    All exceptions in .NET inherit from a common base class to unify error handling.
  2. Step 2: Identify the root base class

    The root base class for all exceptions is System.Exception, from which other exceptions derive.
  3. Final Answer:

    System.Exception -> Option B
  4. Quick Check:

    Base exception class = System.Exception [OK]
Hint: Remember: All exceptions come from System.Exception [OK]
Common Mistakes:
  • Confusing System.SystemException as the base
  • Thinking System.ApplicationException is the root
  • Assuming System.Error exists in .NET
2. Which of the following is the correct syntax to catch a specific exception type ArgumentNullException in C#?
easy
A. catch (ArgumentNullException e) { }
B. catch ArgumentNullException (e) { }
C. catch (Exception e) { }
D. catch ArgumentNullException { }

Solution

  1. Step 1: Recall catch block syntax

    In C#, to catch a specific exception, use catch (ExceptionType variable) syntax.
  2. Step 2: Match the correct syntax for ArgumentNullException

    The correct syntax is catch (ArgumentNullException e) { }, which declares the exception type and variable.
  3. Final Answer:

    catch (ArgumentNullException e) { } -> Option A
  4. Quick Check:

    Correct catch syntax = catch (ExceptionType e) [OK]
Hint: Use parentheses around exception type and variable in catch [OK]
Common Mistakes:
  • Omitting parentheses around exception type
  • Using wrong order like catch ExceptionType (e)
  • Not declaring a variable for the exception
3. What will be the output of the following C# code?
try {
    int[] arr = new int[2];
    Console.WriteLine(arr[5]);
} catch (IndexOutOfRangeException e) {
    Console.WriteLine("Index error caught");
} catch (Exception e) {
    Console.WriteLine("General error caught");
}
medium
A. General error caught
B. Compilation error
C. No output, program crashes
D. Index error caught

Solution

  1. Step 1: Identify the exception thrown

    Accessing index 5 in an array of size 2 throws IndexOutOfRangeException.
  2. Step 2: Check which catch block handles it

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

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

    Specific catch runs before general [OK]
Hint: Specific exceptions catch before general ones [OK]
Common Mistakes:
  • Thinking general Exception catch runs first
  • Assuming program crashes without catch
  • Confusing IndexOutOfRangeException with ArgumentException
4. Identify the error in this code snippet:
try {
    int x = int.Parse("abc");
} catch (FormatException) {
    Console.WriteLine("Format error");
} catch {
    Console.WriteLine("General error");
}
medium
A. Catch-all block must be last
B. Catch blocks order is incorrect
C. No error, code is correct
D. Missing exception variable in catch blocks

Solution

  1. Step 1: Review catch block syntax

    Catch blocks can omit the exception variable if not used, which is valid here.
  2. Step 2: Check catch block order

    The specific FormatException catch is before the general catch-all block, which is correct.
  3. Final Answer:

    No error, code is correct -> Option C
  4. Quick Check:

    Catch-all last and variable optional [OK]
Hint: Catch-all must be last; variable optional in catch [OK]
Common Mistakes:
  • Thinking catch-all must have variable
  • Placing catch-all before specific catch
  • Assuming variable is mandatory in catch
5. You want to catch all exceptions except NullReferenceException and handle them differently. Which approach correctly implements this in C#?
hard
A. Use a catch block for Exception and rethrow if NullReferenceException
B. Use a single catch block for Exception and check exception type inside
C. Use two catch blocks: one for NullReferenceException, one for Exception
D. Use a catch block for NullReferenceException only

Solution

  1. Step 1: Understand the requirement

    We want to handle all exceptions except NullReferenceException differently, so we must detect and exclude it.
  2. Step 2: Evaluate approaches

    Use a catch block for Exception and rethrow if NullReferenceException uses a general catch for Exception, then rethrows if the exception is NullReferenceException, effectively excluding it from handling.
  3. Final Answer:

    Use a catch block for Exception and rethrow if NullReferenceException -> Option A
  4. Quick Check:

    Rethrow to exclude specific exceptions [OK]
Hint: Rethrow specific exceptions inside general catch [OK]
Common Mistakes:
  • Catching NullReferenceException first but not rethrowing
  • Handling all exceptions in one catch without rethrow
  • Using only NullReferenceException catch block