public yy fun()
{
    try
    {
      conn.Open();
      comm.execute();
    }
    catch(XXX)
    {
      return oo;
    }
    finally
    {
      conn.Close();
    }
}问题如下:
如果有异常,那么执行了return oo;后,函数就返回了,还会不会执行finally中的句子?

解决方案 »

  1.   

    msdn上的官方解释The finally block is useful for cleaning up any resources allocated in the try block as well as running any code that must execute even if there is an exception. Control is always passed to the finally block regardless of how the try block exits.
      

  2.   

    Finally在最后执行,肯定执行。
      

  3.   

    会执行finally的,你也可以自己写个测试,跟踪下就知道了
    public yy fun()
    {
      try
      {
      conn.Open();
      comm.execute();
    throw new Expection("");
      }
      catch(XXX)
      {
      return oo;
      }
      finally
      {
      conn.Close();
      }
    }
    另外,你代码在finally里的conn.Close();前应该增加判断是否已打开,否则未打开连接,此处直接关闭会报错。if(conn.state==.....)
      

  4.   

    会执行,即使return,finally也会被执行!
      

  5.   

    finlly会在try...catch块执行结束时执行。如果在try...catch中执行过return语句,那么,在return之后也会执行finally语句的。例子:try
    {
        Console.WriteLine("throw Exception");
        throw new Exception();
    }
    catch (Exception)
    {
        Console.WriteLine("catch Exception");
        return;
    }
    finally
    {
        Console.WriteLine("finally");
    }
      

  6.   

    无论怎样,finally 都会执行。
      

  7.   

    问得蹊跷,finally肯定是要执行的!
      

  8.   

    一定会执行,finally的意思是最终
    在这里就是无论怎样都执行的意思
      

  9.   

    去看看 finally的定义吧 ,只要你在try catch后面 又用了finally是一定会执行finally中的内容的
      

  10.   

    finally 中的语句是不管发生异常还是你代码直接return,都一定会执行的。除外你内存泄漏,导致你程序直接崩掉
      

  11.   

    肯定会执行的,finally就是不管如何都会执行的语句块
      

  12.   

    绝对会执行的,先执行try里的,如果有异常就跳到catch执行catch里的,执行玩catch里的以后在执行finally,如果try里面没有异常就执行完try里的语句在执行catch里的语句。。
      

  13.   

    只要程序没问题,就一定会执行finally。