在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是執行一次類型相容性檢查,并傳回結果