日期:2014-05-17  浏览次数:21213 次

C#在try-catch中使用return返回问题
在C#中 的一个 静态方法中
我使用了try-catch-finally
如 

public static string tsReturn()
{
  try
    {
      //数据库 操作
      return "...";
    }catch(Exception ex)
    {
      return null;
    }
    finally
    {
       //其他操作
    }
}

问题来了 为什么 C#中 还会执行finally 代码块呢 
是不是C#默认这样设置的呢
很纠结啊
看来是我对.net  太无知了 微软 是 如何设计 try-catch-finally 的呢 
看样子又点像 栈 啊 

------解决方案--------------------
finally无论是否有错误都会执行的
------解决方案--------------------
  finllay,,不管你在try里面return了还是怎么样,,程序都会执行finllay的,,
------解决方案--------------------
finllay,是不管你在try里面return了还是怎样,程序都会先执行finllay的代码,然后再执行return。所以把无论如何都要执行的操作写在这里面。
------解决方案--------------------
因为一旦抛异常就会直接跳到catch块,这样有可能导致try块中打开的资源无法释放...所以finally块是必须执行的,以便在finally块中做善后处理...

另外...catch块不做任何处理隐藏异常是非常不好的习惯,至少也要记录一下异常log以便管理员查看...
------解决方案--------------------
我们的程序难免会出现错误,有的错误是在编译的时候产生的,这就是编译错误。
而有的错误是在程序运行过程中产生,这就是程序异常。
总结而来,也就是说,程序的错误现象可以分为两种:
一、错误:在编译的时候产生
二、异常:在程序运行的过程中发生

但是有的异常我们无法避免,但是能够预知。
为了让应用程序能够很好的工作,我们要对那些可能发生的错误进行编码处理,这就是异常处理。

.NET提供了try...catch语句块来捕获和处理异常。
异常处理是在应用程序发生异常情况时,采取什么样的操作,是继续运行程序,还是中断程序的运行。

try
{
  //可能出现异常的代码
}
catch(Exception ex)
{
  MessageBox.Show(ex.Message);
}

如果出现异常,程序就会跳转到catch块中,这个过程就叫做捕获了异常。
如果程序没有出现异常,try块中的代码就会正常执行,catch块中的语句句不会执行。

.NET还给我们提供了一个finally块,无论程序是否发生异常,写在finally块中的代码
都会执行。


希望对楼主有帮助!


------解决方案--------------------
引用:
finllay,,不管你在try里面return了还是怎么样,,程序都会执行finllay的,,