標籤:style blog http color 使用 io strong art
在C#中,所有的東西都是對象。因此任何常數也是一個整型對象。這裡用到了as,as是C#語言裡面的一個關鍵字。as運算子類似於類型轉換,所不同的是,當轉換失敗時,as運算子將產生空,而不是引發異常。在形式上,這種形式的運算式: expression as type as 運算子只執行引用轉換和裝箱轉換。 as 運算子無法執行其他轉換,如使用者定義的轉換,這類轉換應使用case運算式來代替其執行 關於is的其實也差不多,只是IS不會幫你進行任何的轉換。所以需要自已進行顯示轉換 is操作符進行轉換,它自動檢查時局是否和類型相容,並返回結果。而且它不會拋出異常。如果對象引用為null,則is總返回false。
if (cls1 is Class2) { Class2 cls2 = (Class2)cls1; } else System.Console.WriteLine("Error 2!");
as操作符進行轉換:
Class2 cls2 = cls1 as Class2; if (cls2!=null) System.Console.WriteLine("Ok"); else System.Console.WriteLine("Error!");
對比兩種方式,is需要做兩次對象的類型檢查,而as需要做一次物件類型檢查,再加一次null的檢查,而null檢查開銷比物件類型檢查少。相對as的方法效率高些,現在明白了is與as的用處了,主要是類型的轉換和判斷,如果只是檢測類型是否相符那麼只用is就可以了,如果要進行類型轉化可以直接用as。其實可以直接進行強制轉換,只是當類型不符合時會出錯,這是可以利用try{} catch(){} 來進行,但拋出的異常時什麼呢? 類型轉換 1.任何類型都可以轉換為其基類類型,用隱式轉換完成; 2.任何類型轉換為其衍生類別型時,必須進行顯示轉換。如:(類型名)對象名; 3.使用GetType可以取得任何對象的精確類型; 4.基本類型可以使用Convert類實作類別型轉換; 5.除了string以外的其他類型都有Parse方法,用於將字串類型轉換成對應的基本類型; 6.實值型別和參考型別的轉換稱為裝箱(boxing)或拆箱(unboxing);
二、is/as樣本 is轉換規則: 1. 檢查物件類型的相容性,並返回結果true(false); 2.不會拋出異常; 3.如果對象為null,剛返回false; 樣本: C#代碼
- object o ="abc";
- if(oisstring) //執行第一次類型相容性檢查
- {
- string s = (string)o; //執行第二次類型相容性檢查,並轉換
- MessageBox.Show("轉換成功!");
- }
- else
- {
- MessageBox.Show("轉換失敗!");
} as轉換規則:
1.檢查物件類型的相容性,並返迴轉換結果,如果不相容則返回null; 2.不會拋出異常; 3.如果結果判斷為空白,則強制執行類型轉換將拋出NullReferenceException異常;
樣本:C#代碼
- object o ="abc";
- string s = oasstring;//執行第一次類型相容性檢查,並返回結果
- if(s !=null)
- MessageBox.Show("轉換成功!"); else MessageBox.Show("轉換失敗!");
簡記: Is是先進行相容性檢查再進行顯式轉換,As是執行一次類型相容性檢查,並返回結果
http://blog.csdn.net/xqiangqiang/article/details/5287447
在C#中已經提供了一個很好的類型轉換方式,那麼在進行類型轉換的時候,可以按照如下的方式進行選擇。
as操作符來說,它不會做過的轉換操作,當需要轉換對象的類型屬於轉換目標類型或者轉換目標類型的衍生類別型的時候,那麼此轉換操作才能成功,而且並不產生新的對象
類型轉換 |
使用選擇 |
Object => 已知參考型別 |
使用as操作符來完成 |
Object => 已知實值型別 |
先使用is操作符來進行判斷,再用類型強轉方式進行轉換 |
已知參考型別之間轉換 |
首先需要相應類型提供轉換函式,再用類型強轉方式進行轉換 |
已知實值型別之間轉換 |
最好使用系統提供的Convert類所涉及的靜態方法 |