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

Exception hierarchy in .NET in C Sharp (C#) - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is the base class for all exceptions in .NET?
The base class for all exceptions in .NET is <strong>System.Exception</strong>. All other exceptions inherit from this class.
Click to reveal answer
intermediate
What is the difference between System.Exception and System.SystemException?
<code>System.Exception</code> is the root class for all exceptions. <code>System.SystemException</code> is a subclass used for exceptions thrown by the runtime, like <code>NullReferenceException</code> or <code>IndexOutOfRangeException</code>.
Click to reveal answer
intermediate
Name two common subclasses of System.SystemException.
Two common subclasses of System.SystemException are NullReferenceException and IndexOutOfRangeException. These are used for runtime errors.
Click to reveal answer
beginner
What is the purpose of System.IO.IOException in the exception hierarchy?
<code>System.IO.IOException</code> is a subclass of <code>System.Exception</code> that handles errors related to input/output operations, such as file access problems.
Click to reveal answer
beginner
Why should you catch specific exceptions instead of catching System.Exception directly?
Catching specific exceptions helps you handle different error types properly and avoid hiding unexpected errors. Catching System.Exception can make debugging harder and may catch exceptions you don't intend to handle.
Click to reveal answer
Which class is the direct parent of System.NullReferenceException?
ASystem.SystemException
BSystem.ApplicationException
CSystem.Exception
DSystem.IO.IOException
Which exception class should you use for errors caused by invalid arguments?
ASystem.ArgumentException
BSystem.IO.IOException
CSystem.NullReferenceException
DSystem.InvalidOperationException
What is the root class of all exceptions in .NET?
ASystem.SystemException
BSystem.Exception
CSystem.ApplicationException
DSystem.Object
Which exception type is best for handling file read/write errors?
ASystem.InvalidOperationException
BSystem.NullReferenceException
CSystem.ArgumentException
DSystem.IO.IOException
Why is catching System.Exception generally discouraged?
AIt catches too few exceptions
BIt only catches runtime exceptions
CIt can hide unexpected errors and make debugging harder
DIt is deprecated in .NET
Explain the main branches of the exception hierarchy in .NET and their purposes.
Think about runtime vs application exceptions.
You got /4 concepts.
    Describe why it is important to catch specific exceptions rather than the base Exception class.
    Consider what happens if you catch everything at once.
    You got /4 concepts.

      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