2011-02-11 41 views
0

我一直在阅读有关try/finally的MSDN,并发现了以下代码。他们说它会运行Finally子句,但是当我运行它时,它不会继续,并且不会运行它。问题是什么?来自MSDN的示例不起作用 - 试试/终于

public class TestTryFinally 
    { 
     public 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); 
      } 
     } 
    } 

回答

3

看起来不错。它确实会运行finally块。我的猜测是调试器会弹出一个对话框给你,而你不会强迫执行继续。

不在调试器下运行它 - 这将避免调试器在尝试“帮助”您时遇到问题。

+0

你能解释一下“弹出”是什么吗? – Simon 2011-02-11 14:00:45

2

你确定窗口没有关闭得太快,你没有注意到吗?

放在一个的readline使其等待:

public class TestTryFinally 
    { 
     public 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); 
       Console.Write("Press Enter to continue."); 
       Console.ReadLine(); 
      } 
     } 
    } 
0

只是对乔恩斯基特的回答扩大,如果赶上例外调试将不会弹出。

try { 
    i = (int)o; 
} 
catch(InvalidCastException e) {} 
finally { 
    Console.Write("i = {o}",i); 
}