Подтвердить что ты не робот

Как попытаться поймать, наконец, работу блока?

В C#, как работает блок catch try finally?

Итак, если есть исключение, я знаю, что он перейдет в блок catch и затем перейдет к блоку finally.

Но что, если нет ошибки, блок catch не будет запущен, но тогда блок finally будет запущен?

4b9b3361

Ответ 1

Да, блок finally запускается, есть ли исключение или нет.

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ] --RUN ALWAYS
End Try

Смотрите: http://msdn.microsoft.com/en-us/library/fk6t46tz%28v=vs.80%29.aspx

Ответ 2

Да условие finally получает exeucuted, если нет исключения. Пример

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

Итак, если предположить, что возникает исключение, то окончательно выполняется.

Ответ 3

Общее использование catch и, наконец, вместе - это получение и использование ресурсов в блоке try, рассмотрение исключительных обстоятельств в блоке catch и освобождение ресурсов в блоке finally.

Дополнительные сведения и примеры исключений повторного броска см. в try-catch и Бросание исключений. Для получения дополнительной информации о блоке finally см. 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...
    }

}

Ответ 4

Наконец, блок всегда запускается, несмотря ни на что. просто попробуйте этот метод

     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;
        }
    }

Ответ 5

        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");
        }