is檢查對象是否相容與指定類型,返回Boolean值true或者false,值得註意的是,在使用is進行類型轉換的時候是永遠不會拋出異常的,例如: object o=new Object(); Boolean a=(o is object); //返回a=true Boolean b=(o is E ...
is檢查對象是否相容與指定類型,返回Boolean值true或者false,值得註意的是,在使用is進行類型轉換的時候是永遠不會拋出異常的,例如:
object o=new Object();
Boolean a=(o is object); //返回a=true
Boolean b=(o is Employee) //返回b=false
如果對象是null,則返回結果為false,原因是沒有可檢查其類型的對象,及null不是對象。
is操作符的常規用法:
if(o is Employee){
Employee e=(Employee)o;//類型轉換
}
在上邊這段代碼中其實對o對象進行了兩次類型檢查,is操作符首先核實o是否相容與Employee類型,如果是的話,在if語句內部轉換時,CLR(公共語言運行時)會再次核實o是否引用一個Employee。CLR的類型檢查增強了安全性,但無疑對性能造成一定的損耗,
所以C#提供了AS操作符,目的是簡化這種代碼的寫法,同時提高性能。
Employee e=o as Employee;
if(e!=null){
//使用e
}
在這段代碼中,CLR核實o是否相容與Employee類型,如果是,as返回對同一對象的非null引用。如果不相容與Employee類型,as返回null,這樣CLR就只校驗一次對象類型,這個會比is的速度快很多。
as操作符的工作方式和強制類型轉換一樣,只是它永遠不拋出異常,如果對象不能轉換,則返回null,所以使用as轉換的類型前需判斷對象是否為null,否則會出現異常,如:
Object o =new Object();
Employee e= o as Employee;//此處類型轉換失敗,e=null;並不會拋出異常
e.Tostring();// 使用e拋出NullReferenceException異常信息