2012-03-07 23 views
9

me escribió el siguiente código de prueba, a pesar de que yo estaba bastante seguro de lo que sucedería: lo suficientemente¿Qué sucede con el valor devuelto después de que se lanza la excepción en el bloque finally?

static void Main(string[] args) 
{ 
    Console.WriteLine(Test().ToString()); 
    Console.ReadKey(false); 
} 

static bool Test() 
{ 
    try 
    { 
     try 
     { 
      return true; 
     } 
     finally 
     { 
      throw new Exception(); 
     } 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 

Claro, escribió el programa "falso" a la consola. Mi pregunta es, ¿qué sucede con la verdad que originalmente fue devuelta? ¿Hay alguna forma de obtener este valor, en el bloque catch si es posible, o en el bloque finally original si no es así?

Solo para aclarar, esto es solo para fines educativos. Nunca haría un sistema de excepción tan intrincado en un programa real.

+0

Casi un duplicado: [¿Es legal y es posible acceder al valor de retorno en un bloque finally?] (Http://stackoverflow.com/q/304847/256431) –

Respuesta

5

No, no es posible obtener ese valor, porque solo se devuelve un bool, después de todo. Sin embargo, puedes establecer una variable.

static bool Test() 
{ 
    bool returnValue; 

    try 
    { 
     try 
     { 
      return returnValue = true; 
     } 
     finally 
     { 
      throw new Exception(); 
     } 
    } 
    catch (Exception) 
    { 
     Console.WriteLine("In the catch block, got {0}", returnValue); 
     return false; 
    } 
} 

Es desordenado, sin embargo. Y para fines educativos, la respuesta es no.

+0

Muy bien, gracias por la respuesta. Oh bien. – aboveyou00

+3

Esto es realmente interesante en VB.NET donde el resultado de la variable local 'Test' está predefinido para usted. Acabo de probarlo y es 'True' en el bloque' Catch' equivalente, incluso cuando solo 'Return True' se usa en el bloque' Try' interno. Y, por supuesto, la función devuelve 'False'. –

+2

@MarkHurd: Eso es interesante. Necesito usar eso en algún lugar :) Hmm ... – Ryan

Cuestiones relacionadas