所有的異常都要使用try catch 語句捕獲?


在開發應用程序過程中必須檢測代碼可能發生的錯誤並進行正確的處理,這個在理想的情況下,應用程序中的每行 代碼都按照預想的執行,要用到的每種資源總是可以利用,但是在實際的開發過程中,寫代碼難免會出錯,或是網絡中斷、數據服務停止運行都會是應用程序出現異常。

.NET框架提供了一種結構化的異常處理機制,用於處理代碼出現的各種錯誤,就是try catch.

來個小例子。

           object obj;
            DateTime dt;
            try
            {
                obj = new object();
                dt=(DateTime)obj;
            }
            catch (InvalidCastException e)//無效類型轉換的異常
            {

                Console.WriteLine(e.Message);
            }
            catch (InvalidOperationException e)//無效操作異常
            {
                Console.WriteLine(e.Message);
            }
            catch                       //其他的異常
            {
                Console.WriteLine("程序運行出錯!");
            }
            finally                    //必須執行的代碼塊
            {
                dt = Convert.ToDateTime("1900-01-01");
                Console.WriteLine(dt.ToString());
            }

上述的例子中,將object類型轉換為DateTime類型時,就會引發類型的無效轉換異常。
.NET中使用的結構化異常處理的原則是所有可能出錯的地方都要加上結構化異常處理代碼,因為這樣能夠保證在錯誤發生時,正確的釋放所有的資源,但是,不能盲目的使用它,不是每一句代碼都要加上try catch。因為異常是一種耗費資源的機制,每次拋出異常時,異常的堆棧都會建立,異常的信息也會被加載,這樣給程序帶來一些負擔。所以,能加則加,不能加的決不盲目的加。
上述的代碼可以簡化為用is或者是as代替。
  object obj;
            DateTime dt;
            obj = new object();
            if (obj is DateTime)
            {
                dt = (DateTime)obj;
            }
            else
            {
                Console.WriteLine("類型轉換無效!");
            }

這樣看來是簡化多了,處理了異常,也節約了資源,一舉兩得。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM