Как MSDN упоминает:
Код в блоке finally выполняется после того, как будет встречен оператор Return в блоке Try или Catch, но до того, как будет выполнен этот оператор Return. В этой ситуации оператор Return в блоке finally выполняется перед исходным оператором Return. Это дает другое возвращаемое значение. Чтобы предотвратить эту потенциально запутанную ситуацию, избегайте использования операторов Return в блоках finally.
Поскольку я многого не понял из этой заметки, я возьму пример (VB.NET, я думаю, что в C # ситуация аналогичная):
Try
HugeOp()
Return "OK"
Catch
Return "NOK"
Finally
Return "Finally"
End Try
Теперь, почему это должно быть незаконным как в C #, так и в VB.NET?
The .NET compilers (C#, VB) does not allow the using of "Return" in the finally locks, because of bla bla...
была бы более подходящей ... - person serhio   schedule 26.04.2011function m() { try { return 1; } finally { return 2; } }
вызовm()
вернет 2. Реализация этого была настоящей головной болью для команды разработчиков. Это также законно на Java. - person Eric Lippert   schedule 16.04.2013