web-dev-qa-db-fra.com

Comment fonctionne le blocage final du bloc try?

Dans C#, comment fonctionne un blocage de catch try?

Donc, s'il y a une exception, je sais qu'il sautera au bloc catch puis au bloc finale. 

Mais que se passe-t-il s'il n'y a pas d'erreur, le bloc catch ne sera pas exécuté, mais le bloc finally sera-t-il exécuté alors?

43
omega

Oui, le bloc finally est exécuté, qu'il y ait une exception ou non.

Essayer
 [tryStatements] 
 [Exit Try] 
 [Catch [exception [As type]] [When expression] 
 [catchStatements] 
 [Exit Try]] 
 [Catch ...] 
 [Enfin 
 [FinallyStatements]] - LANCEZ TOUJOURS 
 Fin Essayez 

Voir: http://msdn.Microsoft.com/en-us/library/fk6t46tz%28v=vs.80%29.aspx

41
James Hill

Oui, la clause finally est exécutée s'il n'y a pas d'exception . Prenons un exemple

     try
        {
            int a = 10;
            int b = 20;
            int z = a + b;
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            Console.WriteLine("Executed");
        }

Donc, ici si supposons une exception se produit aussi finalement est exécuté. 

13
Sohail

Une utilisation courante de catch et de la combinaison consiste à obtenir et utiliser des ressources dans un bloc try, à gérer des circonstances exceptionnelles dans un bloc catch et à libérer les ressources dans le bloc finally.

Pour plus d'informations et d'exemples sur les exceptions de réémission, voir try-catch et Lancer des exceptions . Pour plus d'informations sur le bloc finally, voir try-finally .

public class EHClass
{
    void ReadFile(int index)
    {
        // To run this code, substitute a valid path from your local machine 
        string path = @"c:\users\public\test.txt";
        System.IO.StreamReader file = new System.IO.StreamReader(path);
        char[] buffer = new char[10];
        try
        {
            file.ReadBlock(buffer, index, buffer.Length);
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
        }

        finally
        {
            if (file != null)
            {
                file.Close();
            }
        }
        // Do something with buffer...
    }

}
5
Alex Jolig
        try
        {
            //Function to Perform
        }
        catch (Exception e)
        {
         //You can display what error occured in Try block, with exact technical spec (DivideByZeroException)
            throw; 
            // Displaying error through signal to Machine, 
            //throw is usefull , if you calling a method with try from derived class.. So the method will directly get the signal                
        }

        finally  //Optional
        {
            //Here You can write any code to be executed after error occured in Try block
            Console.WriteLine("Completed");
        }
0
Balaji

enfin, bloquez toujours, quelle que soit la méthode . essayez cette méthode

     public int TryCatchFinally(int a, int b)
    {
        try
        {
            int sum = a + b;
            if (a > b)
            {
                throw new Exception();
            }
            else
            {
                int rightreturn = 2;
                return rightreturn;
            }
        }
        catch (Exception)
        {
            int ret = 1;
            return ret;
        }
        finally
        {
            int fin = 5;
        }
    }
0
Rohan M Nabar