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

Finally block behavior 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 - Finally block behavior
Try block starts
Code runs in try
Exception?
YesCatch block runs
Catch code runs
Try block ends
Catch ends
Finally block runs ALWAYS
Code after try-catch-finally
The finally block runs no matter what happens in try or catch, even if an exception occurs or not.
Execution Sample
C Sharp (C#)
try {
  Console.WriteLine("Try block");
  throw new Exception();
} catch {
  Console.WriteLine("Catch block");
} finally {
  Console.WriteLine("Finally block");
}
This code shows try throwing an exception, catch handling it, and finally always running.
Execution Table
StepCode ExecutedException Thrown?Block RunningOutput
1Console.WriteLine("Try block")NoTryTry block
2throw new Exception()YesTry
3Catch block runsHandledCatchCatch block
4Finally block runsHandledFinallyFinally block
5Code after try-catch-finallyHandledAfter
💡 Finally block runs always, then code continues after try-catch-finally.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
ExceptionThrownNoNoYesHandledHandledHandled
Key Moments - 3 Insights
Does the finally block run if an exception is thrown and caught?
Yes, as shown in execution_table rows 2, 3, and 4, finally runs after catch handles the exception.
What if no exception is thrown, does finally still run?
Yes, finally always runs after try block finishes, even if no exception occurs (not shown here but same logic).
Can finally block prevent the exception from propagating?
No, finally runs after catch handles exceptions; it cannot stop exceptions by itself (see execution_table row 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output at Step 3?
ATry block
BCatch block
CFinally block
DNo output
💡 Hint
Check the Output column at Step 3 in execution_table.
At which step does the finally block run?
AStep 2
BStep 3
CStep 4
DStep 5
💡 Hint
Look for 'Finally block runs' in the Code Executed column.
If the exception was not thrown, which step would be skipped?
AStep 3
BStep 2
CStep 4
DStep 5
💡 Hint
Catch block runs only if exception is thrown (Step 3).
Concept Snapshot
try { ... } catch { ... } finally { ... }
- finally block runs always, after try and catch
- runs even if exception thrown or not
- useful for cleanup actions
- exception handled in catch before finally
- code after finally runs next
Full Transcript
This example shows how the finally block behaves in C#. The try block runs first. If an exception is thrown, the catch block runs to handle it. Regardless of exception or not, the finally block always runs after try and catch. This ensures cleanup code runs no matter what. The execution table shows each step, the output printed, and when the exception is thrown and handled. The variable tracker shows the exception state changing from no to yes and then handled. Key moments clarify that finally runs always, even if no exception, and it cannot stop exceptions by itself. The quiz questions help check understanding of when finally runs and what outputs appear.

Practice

(1/5)
1. What is the main purpose of the finally block in C# exception handling?
easy
A. To execute code regardless of whether an exception occurs or not
B. To catch exceptions thrown in the try block
C. To declare variables used in the try block
D. To stop the program when an exception occurs

Solution

  1. Step 1: Understand the role of finally

    The finally block runs after the try and catch blocks, no matter what happens.
  2. Step 2: Identify its purpose

    It is used to run cleanup code or important steps that must always execute, regardless of exceptions.
  3. Final Answer:

    To execute code regardless of whether an exception occurs or not -> Option A
  4. Quick Check:

    finally always runs [OK]
Hint: Remember: finally always runs, no matter what [OK]
Common Mistakes:
  • Confusing finally with catch block
  • Thinking finally only runs on exceptions
  • Believing finally can catch exceptions
2. Which of the following is the correct syntax for using a finally block in C#?
easy
A. try { } catch { } finally { }
B. try { } finally { } catch { }
C. try { } catch { }
D. finally { } try { } catch { }

Solution

  1. Step 1: Recall correct order of blocks

    In C#, the order is try, then catch (optional), then finally (optional).
  2. Step 2: Match syntax

    Only try { } catch { } finally { } shows the correct order: try { } catch { } finally { }.
  3. Final Answer:

    try { } catch { } finally { } -> Option A
  4. Quick Check:

    Correct block order [OK]
Hint: Remember order: try, catch, then finally [OK]
Common Mistakes:
  • Placing finally before catch
  • Omitting try block
  • Using finally without try
3. What will be the output of the following C# code?
try {
    Console.WriteLine("Start");
    throw new Exception();
} catch {
    Console.WriteLine("Caught");
} finally {
    Console.WriteLine("Finally");
}
medium
A. Start\nFinally
B. Start\nCaught\nFinally
C. Caught\nFinally
D. Start\nCaught

Solution

  1. Step 1: Trace the try block

    "Start" is printed, then an exception is thrown.
  2. Step 2: Catch and finally execution

    The exception is caught, so "Caught" is printed, then the finally block runs printing "Finally".
  3. Final Answer:

    Start\nCaught\nFinally -> Option B
  4. Quick Check:

    try prints Start, catch prints Caught, finally prints Finally [OK]
Hint: Remember: finally runs after catch even if exception thrown [OK]
Common Mistakes:
  • Ignoring catch block output
  • Thinking finally runs before catch
  • Missing the exception thrown in try
4. Identify the error in this C# code snippet:
try {
    Console.WriteLine("Hello");
} finally {
    Console.WriteLine("Cleanup");
} catch (Exception ex) {
    Console.WriteLine("Error");
}
medium
A. The catch block must come after finally
B. No error, code is correct
C. You cannot use finally without catch
D. The finally block must come after catch

Solution

  1. Step 1: Check block order rules

    In C#, the finally block must come after all catch blocks.
  2. Step 2: Identify incorrect order

    The code places finally before catch, which is invalid syntax.
  3. Final Answer:

    The finally block must come after catch -> Option D
  4. Quick Check:

    finally after catch [OK]
Hint: Remember: catch blocks come before finally [OK]
Common Mistakes:
  • Placing finally before catch
  • Thinking finally can be before catch
  • Confusing order of blocks
5. Consider this code:
int result = 0;
try {
    result = 10 / 0;
} catch (DivideByZeroException) {
    result = 1;
} finally {
    result = 2;
}
Console.WriteLine(result);

What will be printed and why?
hard
A. 0, because division by zero stops execution before catch
B. 1, because catch sets result to 1 and finally does not change it
C. 2, because finally always runs and can overwrite result
D. Exception thrown, program crashes

Solution

  1. Step 1: Analyze exception and catch block

    Division by zero throws DivideByZeroException, caught by catch which sets result = 1.
  2. Step 2: Understand finally block effect

    The finally block runs after catch and sets result = 2, overwriting previous value.
  3. Final Answer:

    2, because finally always runs and can overwrite result -> Option C
  4. Quick Check:

    finally runs last and sets result = 2 [OK]
Hint: finally runs last and can overwrite variables set earlier [OK]
Common Mistakes:
  • Assuming catch value stays after finally
  • Thinking exception stops finally from running
  • Believing program crashes without output