C#強制類型轉化()、is、as應用分析
C#強制類型轉化有以下三種:
注:objA 為 typeA 類型,objB 為 typeB 類型
(1) typeA objA = (typeA)objB;
(2) typeA objA = objB as objA;
(3) typeA objA = objB as typeA
在實際開發過程中我們經常用到上面三種類型轉換,但這三種C#強制類型轉化的區別,以及在使用中應如何選擇呢?
在我們使用***種類型轉換時,如果類型typeA是typeB的上層類,則能正確進行類型轉換,如typeB是typeA的上層類,將會拋出System.InvalidCastException異常。所以在實開發中,為了避免異常的發行,我們可能會用到如下的代碼:
- If(objB is typeA)
- {
- objA = (typeA)objB;
- }
其中is為第二種類型轉換,根據MSDN上的解釋,它的作用是“檢查對象是否與給定類型兼容”,盡管它僅是反回一個boolean類型的值,但它也是通過進行類型轉換來判斷是否兼容的,所以,在使用此語句的時候,會進行一次類型轉換。那么,如果typeB與typeA是相容的話,上述代碼將會再次進行 (typeA)objB的類型轉,肯定會影響我們所開發程序的性能。那么有沒有一種更好的辦法來幫助我們解決這個問題呢?
下面我們來看一下第三種C#強制類型轉化。
在進行第三種類型轉換時,如果typeB型的實例objB無法轉換到typeA類型時,就會反回一個null值,若轉換成功,則返回一個typeA類型的實例。此種轉換不會發生異常,且僅需一次類型轉換。這就解決了上面兩次類型轉換所帶來的性能消耗。
本文來自朱保旭的博客園文章《C#下的強制類型轉換應用分析:()、is、as》
【編輯推薦】