Как MSDN упоминает:
Код в блоке finally работает после оператор Return в Try или Catch блок встречается, но до этого Выполняется оператор return. В этом ситуация, оператор возврата в Наконец, блок выполняется до начальный оператор возврата. Это дает другое возвращаемое значение. Предотвращать эта потенциально запутанная ситуация, избегайте использования операторов Return в Наконец блоки.
Как я много не понял из этой заметки, я приведу пример (VB.NET, я думаю, что в С# ситуация похожа):
Try
HugeOp()
Return "OK"
Catch
Return "NOK"
Finally
Return "Finally"
End Try
Теперь почему это должно быть незаконным в С# и VB.NET?