as 運算符類似於類型轉換,所不同的是,當轉換失敗時,as運算符將產生空,而不是引發異常。在形式上,這種形式的表達式:
expression_r as type
as運算符只執行引用轉換和裝箱轉換。
as運算符無法執行其他轉換,如用戶定義的轉換,這類轉換應使用case表達式來代替其執行。
關於is的其實也差不多,只是IS不會幫你進行任何的轉換。所以需要自已進行顯示轉換。
is操作符進行轉換,它自動檢查時局是否和類型兼容,並返回結果。而且它不會拋出異常。如果對象引用為null,則is總返回false。
is例子:
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的方法效率高些。