1. 程式人生 > >try後的finally {}裡的程式碼會不會被執行,什麼時候被執行?

try後的finally {}裡的程式碼會不會被執行,什麼時候被執行?

先看下面一段程式碼

        static void Main(string[] args)
        {
            Console.WriteLine(GetIt());
            Console.ReadKey();
        }

        static int GetIt()
        {
            int i = 8;
            try
            {
                i++;
                Console.WriteLine("a");
                return i;
            }
            finally
            {
                Console.WriteLine("b");
                i++;
            }
        }

上面程式的執行結果是:ab9

        static void Main(string[] args)
        {
            //Console.WriteLine(GetIt());
            Console.WriteLine(GetPerson().Age);
            Console.ReadKey();
        }

        static Person GetPerson()
        {
            Person p = new Person();
            p.Age = 8;
            try
            {
                p.Age++;
                Console.WriteLine("a");
                return p;
            }
            finally
            {
                Console.WriteLine("b");
                p.Age++;
            }
        }

上面程式的執行結果是:ab10

也就是說我們在執行到try 裡面return語句時,先記錄下要返回的值,但是並沒有返回,而是去執行ffinally裡面的語句,執行完成後,再返回try裡面的先前記錄的結果

讓我們看看讀取資料庫中資料的條數的

public int QueryCount()
{
   …..
   try
   {
      return cmd.ExecuteScalar();
   }
   finally
   {
      cmd.Dispose();
   }
}

先執行cmd.ExecuteScalar(),把返回值暫時存起來,然後再去執行finally(錢放在這,我去劫個色),然後把返回值返回。return都是最後執行,但是return後的表示式的計算則是在finally之前。

如果C#設計的是先執行cmd.Dispose()再執行return就會出現return執行失敗了,因為cmd已經Dispose了。