Compartir a través de


try-finally (Referencia de C#)

El bloque finally es útil para limpiar cualquier recurso asignado en el bloque try, así como también para ejecutar cualquier código que deba ejecutarse incluso si hay una excepción. El control se transfiere siempre al bloque finally independientemente de cómo finalice el bloque try.

Mientras que catch se utiliza para controlar las excepciones que se producen en un bloque de instrucciones, finally se emplea para asegurar la ejecución de un bloque de instrucciones sin importar cómo finaliza el bloque try anterior.

Ejemplo

En este ejemplo, existe una instrucción de conversión no válida que produce una excepción. Cuando se ejecuta el programa, se obtiene un mensaje de error en tiempo de ejecución, pero la cláusula finally se ejecuta de todas formas y muestra el resultado.

    public class ThrowTest
    {
        static void Main()
        {
            int i = 123;
            string s = "Some string";
            object o = s;

            try
            {
                // Invalid conversion; o contains a string, not an int
                i = (int)o;

                Console.WriteLine("WriteLine at the end of the try block.");
            }
            finally
            {
                // To run the program in Visual Studio, type CTRL+F5. Then 
                // click Cancel in the error dialog.
                Console.WriteLine("\nThe finally block is executed, even though"
                    + " an error was caught in the try block.");
                Console.WriteLine("i = {0}", i);
            }
        }
        // Output:
        // Unhandled Exception: System.InvalidCastException: Specified cast is not valid.
        // at ValueEquality.ThrowTest.Main() in c:\users\sahnnyj\documents\visual studio
        // 2010\Projects\ConsoleApplication9\Program.cs:line 21
        //
        // The finally block is executed, even though an error was caught in the try block.
        // i = 123
    }

El ejemplo anterior hace que se produzca la excepción System.InvalidCastException.

A pesar de que se capturó una excepción, la instrucción de salida incluida en el bloque finally se ejecutará de todas formas, es decir:

i = 123

Para obtener más información acerca de finally, vea try-catch-finally.

C# también proporciona using (Instrucción, Referencia de C#), que ofrece una sintaxis adecuada para exactamente la misma funcionalidad que una instrucción try-finally.

Especificación del lenguaje C#

Para obtener más información, vea la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Tareas

Cómo: Iniciar excepciones explícitamente

Referencia

Palabras clave de C#

try, catch, and throw Statements (C++)

Instrucciones para el control de excepciones (Referencia de C#)

throw (Referencia de C#)

try-catch (Referencia de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#

Historial de cambios

Fecha

Historial

Motivo

Mayo de 2010

Se agregaron instrucciones write y estándar al ejemplo para clarificar los resultados.

Comentarios de los clientes.