Whatever is inside finally blocks is executed (almost) always, so what's the difference between enclosing code into it or leaving it unclosed?
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
- How to know full paths to DLL's from .csproj f
The finally block is valuable for cleaning up any resources allocated in the try block as well as running any code that must execute even if there is an exception. Control is always passed to the finally block regardless of how the try block exits.
Most advantages of using try-finally have already been pointed out, but I thought I'd add this one:
This behaviour makes it very useful in various situations, particularly when you need to perform cleanup (dispose resources), though a using block is often better in this case.
i will explain the use of finally with a file reader exception Example
in the above example if the file called Data.txt is missing, an exception will be thrown and will be handled but the statement called
StreamReader.Close();
will never be executed.Because of this resources associated with reader was never released.
Happy Coding :)
Note: "@" is used to create a verbatim string, to avoid error of "Unrecognized escape sequence". The @ symbol means to read that string literally, and don't interpret control characters otherwise.
any time you use unmanaged code requests like stream readers, db requests, etc; and you want to catch the exception then use try catch finally and close the stream, data reader, etc. in the finally, if you don't when it errors the connection doesn't get closed, this is really bad with db requests
if you don't want to catch the error then use
and the connection object will be disposed of automatically if there is an error, but you don't capture the error
Sometimes you don't want to handle an exception (no catch block), but you want some cleanup code to execute.
For example:
Control Flow of the Finally Block is either after the Try or Catch block.
with Exception 1 > 2 > 3 > 4 > 5 if 3 has a Return statement 1 > 2 > 3 > 4
without Exception 1 > 2 > 4 > 5 if 2 has a return statement 1 > 2 > 4