解析C 中is和as操作符的用法 two

2022-01-19 00:37:22 字數 1461 閱讀 4565

c# 中 is和as 操作符是用來進行強制型別轉換的

is : 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常

objecto =

newobject

();  

if(o 

islabel)  

else

在上面的**,clr實際上會檢查兩次物件的型別,is操作符先核實一次,如果o相容於lable,那麼在(label)o時會再次核實一次,效率比較低,不建議使用

as:與強制型別轉換是一樣的,但是永遠不會丟擲異常,即如果轉換不成功,會返回null

objecto =

newobject

(); 

label lb =o 

aslabel;    

if(lb 

==null

)   

else

在上面的**中,clr只會進行一次型別核實,效率要高於 is

在學習c#時,看到這樣一種表達方式:

bap_user user 

=session[

"user"] 

asbap_user; 

if(user 

==null

)     

return

"error

"); 

有些不明白,上網查了些資料,對is和as操作符有了些了解,把資料放在這裡供學習和參考:

在c#中,所有的東西都是物件。因此任何常數也是乙個整型物件。這裡用到了as ,as 是c#語言裡面的乙個關鍵字。as 運算子類似於型別轉換,所不同的是,當轉換失敗時,as 運算子將產生空,而不是引發異常。在形式上,這種形式的表示式:

expression 

astype 

as 運算子只執行引用轉換和裝箱轉換。

as 運算子無法執行其他轉換,如使用者定義的轉換,這類轉換應使用case表示式來代替其執行

關於is的其實也差不多,只是is不會幫你進行任何的轉換。所以需要自已進行顯示轉換

is操作符進行轉換,它自動檢查時局是否和型別相容,並返回結果。而且它不會丟擲異常。如果物件引用為null,則is總返回false。

if(cls1 

isclass2)       

else

as操作符進行轉換:

class2 cls2 

=cls1 

asclass2;

if(cls2

!=null

)    

system.console.writeline("ok

"); 

else

system.console.writeline(

"error!

"); 

對比is和as操作符轉換的兩種方式,is需要做兩次物件的型別檢查,而as需要做一次物件型別檢查,再加一次null的檢查,而null檢查開銷比物件型別檢查少。相對as的方法效率高些。

解析C 中is和as操作符的用法

c 中 is和as 操作符是用來進行強制型別轉換的 is 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常 在上面的 clr實際上會檢查兩次物件的型別,is操作符先核實一次,如果o相容於lable,那麼在 label o時會再次核實一次,效率比較低,不建議使用 as 與強...

解析C 中is和as操作符的用法

c 中 is和as 操作符是用來進行強制型別轉換的 is 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常 object o new object if o is label else 在上面的 clr實際上會檢查兩次物件的型別,is操作符先核實一次,如果o相容於labl...

解析C 中is和as操作符的用法

c 中 is和as 操作符是用來進行強制型別轉換的 is 檢查乙個物件是否相容於其他指定的型別,並返回乙個bool值,永遠不會丟擲異常 object o newobject if o islabel else 在上面的 clr實際上會檢查兩次物件的型別,is操作符先核實一次,如果o相容於lable,...