Exceptions help your program handle errors without crashing. The exception hierarchy organizes different error types so you can catch and fix them properly.
When you want to catch specific errors like file not found or divide by zero.
When you need to create your own error types for special cases in your program.
When you want to handle all errors in a general way using a base exception.
When debugging to understand what kind of error happened.
When writing code that needs to be safe and not stop unexpectedly.
Syntax
C Sharp (C#)
try {
// code that might cause an error
} catch (ExceptionType ex) {
// code to handle that error
} finally {
// code that runs no matter what
}
try block contains code that might cause an error.
catch block handles specific error types.
Examples
This catches a divide by zero error specifically.
C Sharp (C#)
try {
int x = 5 / 0;
} catch (DivideByZeroException ex) {
Console.WriteLine("Cannot divide by zero.");
}
This catches when you try to use an object that is null.
C Sharp (C#)
try {
string s = null;
Console.WriteLine(s.Length);
} catch (NullReferenceException ex) {
Console.WriteLine("Object was null.");
}
This catches any error because Exception is the base class for all exceptions.
This program tries to access an array element that does not exist. It catches the specific error and also has a general catch. The finally block runs always.
C Sharp (C#)
using System;
class Program {
staticvoid Main() {
try {
int[] numbers = {1, 2, 3};
Console.WriteLine(numbers[5]);
} catch (IndexOutOfRangeException ex) {
Console.WriteLine("Index was outside the bounds of the array.");
} catch (Exception ex) {
Console.WriteLine("Some other error occurred.");
} finally {
Console.WriteLine("This runs no matter what.");
}
}
}
OutputSuccess
Important Notes
All exceptions in .NET inherit from System.Exception.
You can catch specific exceptions first, then more general ones.
The finally block is useful for cleanup code that must run.
Summary
Exceptions are organized in a hierarchy starting from System.Exception.
Catching specific exceptions helps handle errors better.
Use try-catch-finally blocks to manage errors safely.
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
Step 1: Understand the exception hierarchy
All exceptions in .NET inherit from a common base class to unify error handling.
Step 2: Identify the root base class
The root base class for all exceptions is System.Exception, from which other exceptions derive.
Final Answer:
System.Exception -> Option B
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
Step 1: Recall catch block syntax
In C#, to catch a specific exception, use catch (ExceptionType variable) syntax.
Step 2: Match the correct syntax for ArgumentNullException
The correct syntax is catch (ArgumentNullException e) { }, which declares the exception type and variable.
Accessing index 5 in an array of size 2 throws IndexOutOfRangeException.
Step 2: Check which catch block handles it
The first catch block specifically catches IndexOutOfRangeException, so it runs and prints "Index error caught".
Final Answer:
Index error caught -> Option D
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
Step 1: Review catch block syntax
Catch blocks can omit the exception variable if not used, which is valid here.
Step 2: Check catch block order
The specific FormatException catch is before the general catch-all block, which is correct.
Final Answer:
No error, code is correct -> Option C
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
Step 1: Understand the requirement
We want to handle all exceptions except NullReferenceException differently, so we must detect and exclude it.
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.
Final Answer:
Use a catch block for Exception and rethrow if NullReferenceException -> Option A
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
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.