Duplicar posible:
Finally Block Not Running??finalmente bloquear en C#
Tengo una pregunta con respecto bloque finally en C#. escribí un pequeño código de ejemplo:
public class MyType
{
public void foo()
{
try
{
Console.WriteLine("Throw NullReferenceException?");
string s = Console.ReadLine();
if (s == "Y")
throw new NullReferenceException();
else
throw new ArgumentException();
}
catch (NullReferenceException)
{
Console.WriteLine("NullReferenceException was caught!");
}
finally
{
Console.WriteLine("finally block");
}
}
}
class Program
{
static void Main(string[] args)
{
MyType t = new MyType();
t.foo();
}
}
Mientras que yo sepa, finally supone que debe funcionar deterministicly, sea o no una excepción fue arrojado. Ahora, si el usuario ingresa "Y" - se lanza NullReferenceException, la ejecución se mueve al reloj catch y luego al bloque finally como esperaba. Pero si la entrada es otra cosa, se lanza ArgumentException. No existe un bloque catch adecuado para detectar esta excepción, así que pensé que la ejecución debería mover el bloque finally, pero no es así. ¿Podría alguien por favor explicarme por qué?
gracias a todos :)
posible duplicar: http://stackoverflow.com/questions/4193493/finally-block-not-running –
He intentado con el código, y entra en el bloque finally como se esperaba – SWeko
¿Puedes aclarar a qué te refieres con ' Pensé que la ejecución debería mover el bloque final. Supongo que el control irá al final en ambos casos, ¿no? – InSane