IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Try Catch Finally et Return


Sujet :

C#

  1. #21
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    Et si un finally est appelé par un return,
    Et qu'il fait lui aussi un return ...
    C'est illogique

  2. #22
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    @giova_fr
    il y a t'il un piège si on place un return dans le try ou le catch? un effet de bord indésirable qui se produirait dans un cas particulier?

    C'est pour cette raison que je tente de comprendre précisément comment se comporte finally, dans quel ordre se passent les choses...
    Aucun effet de bord, non.

    En fait, la magie se passe au niveau de la génération du code IL. Si tu observes ce dernier, tu constates que le "return" que tu places dans ton bloc "try" ou "catch" est remplacé par une assignation à une variable locale. Le return est ensuite inséré après le bloc finally et renvoie le contenu de la variable locale en question.
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Code d'origine :
    try { return GimmeAnInteger(); }
    finally { CleanUp(); }
     
    // Le compilateur ce qui précède par ce qui suit :
    int __result;
    try { __result = GimmeAnInteger(); }
    finally { CleanUp(); }
    return __result;

    @brachior et nah666
    Quand j'ai parlé de placer le return après le finally, je ne voulais absolument pas dire que c'était mieux que de le placer dans le bloc try, c'était simplement dans le contexte de la question de savoir pourquoi on ne pouvait pas mettre de return dans le finally.

    Alors est-ce mieux de mettre le return dans le try ou après le finally ? Bof, c'est une pure question stylistique, les deux se défendent.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Try catch finally, flux best practice
    Par LittleBean dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2009, 13h45
  2. try catch finally
    Par Javamar dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 07/03/2009, 17h05
  3. Interrogation sur : Try.Catch.Finally
    Par Seth77 dans le forum C#
    Réponses: 7
    Dernier message: 16/09/2008, 11h22
  4. Réponses: 3
    Dernier message: 12/12/2006, 18h58
  5. Réponses: 13
    Dernier message: 03/08/2006, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo