Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: [EX3] en 05 de Diciembre de 2007, 10:31:38 AM

Título: .NET - Bloque "try finally" no funciona
Publicado por: [EX3] en 05 de Diciembre de 2007, 10:31:38 AM
Perplejo me he quedado haciendo unas pruebas tanto en Visual Basic .NET como en C# donde el siguiente codigo sacado de la propia MSDN no ha funcionado:
// try-finally
using System;
public class MainClass
{
   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;
       }
       finally
       {
           Console.Write("i = {0}", i);
       }
   }
}

Me salta la excepcion igualmente en vez de saltar al bloque finally. No se supone que ocurra la catastrofe que ocurra deberia ejecutar si o si el bloque finally? :shock:

Salu2...
Título: .NET - Bloque "try finally" no funciona
Publicado por: Warchief en 05 de Diciembre de 2007, 11:05:16 AM
Poner el finally no te exime de poner un catch para la excepción apropiada. A pesar de saltar la excepción, el finally se ejecuta. Si no has capturado la excepción, el programa hace un crash excelente, pero el finally se ejecuta sí o sí.

El ejemplo es un poco "minimalista". Uno más interesante:

using System;
public class MainClass
{
   static void Do()
   {
       int i = 123;
       string s = "Some string";
       object o = s;
       try
       {
           // Invalid conversion; o contains a string not an int
           i = (int)o;
       }
       finally
       {
           Console.WriteLine( "i = {0}", i );
       }
   }

   static void Main()
   {
       try
       {
           Do();
       }
       catch
       {
           Console.WriteLine( "El Do() la ha cagado" );
       }
   }
}


Citar
i = 123
El Do() la ha cagado
Título: Re: .NET - Bloque "try finally" no funciona
Publicado por: Tei en 05 de Diciembre de 2007, 11:07:29 AM
Hummm....
Título: .NET - Bloque "try finally" no funciona
Publicado por: [EX3] en 05 de Diciembre de 2007, 12:03:18 PM
Cita de: "Warchief"El ejemplo es un poco "minimalista".
Es el que utiliza de ejemplo la MSDN en la entrada referida a la palabra clave "finally":
http://msdn2.microsoft.com/es-es/library/zwc8s4fz(VS.80).aspx

Acaba un compañero mio de hacer una prueba en Java y parece ser que si, que la excepcion no se anula, se escapa hacia afuera hasta dar con catch que la recoja para despues volver al finally del try que la genero, curioso :?

Gracias por la explicacion y el ejemplo, Warchief.

Salu2...