This time I would like to point out the behaviour, that should be absolutely clear to any C# developer. When an exception is thrown inside
try..finally block (without
catch), and consequently in the scope of a
using statement, it is bubbled up to the containing scope, rather than handled in any way. It implies that
catch has in fact nothing to do with exception handling.
I have already come across learning materials that suggest the otherwise. Let’s have a look at  (my own translation from Polish):
With a using clause we end up having code which is proof against exceptions
A finally block can be used to handle any exception
In my opinion the fact, that in the very case of
try..finally apart from
catch an exception is simply thrown out of the scope, is not stressed enough in the literature and claims like these above can be misleading.
Going a little bit further, I consider this as a little semantic pitfall in the language. When we think of a
try statement, we immediately recall exception handling mechanism. However this time this is not the case. Maybe other languages have better (i.e. more meaningful) way of expressing the intent of a code being executed at the end of a scope. Have a look at
scope(failure) instructions in D language in .
. Polish magazine “Programista”, issue 6/2013 (13) p. 26
. “Programming in C#, A primer, second edition”, chapter 18.8