2010-05-13 132 views

回答

8

您可以从try块内返回,但请记住finally子句中的代码将在从方法返回之前执行。例如,使用下面的方法调用MessageBox.Show(test().ToString());将导致出现两个消息框(第一个显示“3”,第二个显示“1”)。

int test() 
    { 
     try 
     { 
      return 1; 
      throw new Exception(); 
     } 
     catch (Exception e) 
     { 
      return 2; 
     } 
     finally 
     { 
      MessageBox.Show("3"); 
     } 
    } 
+4

还要注意,试图从finally子句返回会导致编译器错误。 – TreDubZedd 2010-05-13 17:06:51

+0

+1对答案和评论今天学习了一些关于finally块的内容。 – 2010-05-13 21:45:36

-1

当然,你可以不喜欢它:

public string X(..) 
{ 
    try 
    { 
     //do something 
     return value; 
    } 
    catch(Exception ex) 
    { 
     throw; 
     //or return here 
    } 
} 
+0

重要的是你要么投掷或返回到catch块。如果try代码引发异常,try块中的返回将不会被执行。 – 2010-05-13 16:17:49

+4

**绝不要写'throw ex'!** – SLaks 2010-05-13 16:22:54

4

当然,你可以使用try块的回报,而且语法就像其他任何地方。

try 
{ 
    return 0; 
} 
catch (Exception e) 
{ 
    // handle exception 
} 
0

是的。例如,我可以使用局部变量而不必扩大其范围。

int Foo(string bar) { 
    try { 
     int biz = int.Parse(bar); 

     return biz; 
    } catch(...) { 
     // Handle bad `bar` 
    } 
} 
0

这个问题的回答是肯定的。 作为一个例子,你可以参考以下问题: finally and return 希望你也能得到澄清。

相关问题