Retournez dans le bloc Enfin ... Pourquoi pas?
Comme MSDN mentions:
Le code dans un bloc finally est exécuté après l'
une instruction de Retour dans un Try ou Catch
le bloc est rencontré, mais avant que
Retour exécution d'une instruction. Dans ce
situation, une instruction de Retour dans le
Bloc finally est exécuté avant l'
initiale de l'instruction Return. Cela donne un
différentes valeur de retour. Pour éviter
ce qui pourrait semer la confusion de la situation,
évitez d'utiliser l'instruction Return dans
Enfin blocs.
Que je n'ai pas de comprendre beaucoup de choses de cette note, je vais prendre un exemple (VB.NET je pense en C# est, la situation est similaire):
Try
HugeOp()
Return "OK"
Catch
Return "NOK"
Finally
Return "Finally"
End Try
Maintenant, pourquoi devraient être illégaux en C# et en VB.NET?
source d'informationauteur serhio
Vous devez vous connecter pour publier un commentaire.
C'est illégal parce que quand vous atteignez le
Finally
bloc, la valeur de retour est déjà défini ("OK" si tout s'est bien passé, "NOK" si une exception a été pris). Si vous avez été en mesure de retourner une valeur différente de l'Finally
bloc, cette valeur toujours être retournés, quel que soit le résultat des instructions ci-dessus. Il n'aurait tout simplement pas de bon sens...J'étais curieux à ce sujet, je suis en cours d'exécution VS2010 et ne permettent pas un Retour dans le bloc finally. voici le code que j'ai compilé
J'ai compilé le fichier DLL pour afficher le MSIL il avait l'air plutôt intéressant, le code ci-dessus fondamentalement obtient refait ce:
et le test de cette, le MSIL pour les deux classes ci-dessus est exactement le même.
Je suppose que la réponse est dans la question. C'est illégal parce que c'est source de confusion. Ce n'est pas intuitive dont la valeur sera retournée. Si c'est illégal, vous êtes obligé d'écrire du code où l'écoulement est beaucoup plus claire.