假設有一個接口A
和一個實現該接口的類的變量'x'。現在,我可以執行這些:演員之間有什麼區別:(A)x和x爲A?
var a = (A) x;
或者:
var a = x as A;
我知道,在發生故障的情況下,第一條語句將拋出InvalidCastException
和第二次返回null
。但是還有其他的區別嗎?特別是在表現?
假設有一個接口A
和一個實現該接口的類的變量'x'。現在,我可以執行這些:演員之間有什麼區別:(A)x和x爲A?
var a = (A) x;
或者:
var a = x as A;
我知道,在發生故障的情況下,第一條語句將拋出InvalidCastException
和第二次返回null
。但是還有其他的區別嗎?特別是在表現?
的作爲操作者是一樣的鑄造操作。但是,如果轉換不可行,則返回null而不是引發異常。
您可以使用as運算符在兼容的引用類型或可爲空的類型之間執行某些類型的轉換。
考慮下面的例子:
expression as type
該代碼相當於除了表達變量只計算一次以下表達式。
expression is type ? (type)expression : (type)null
注意將作爲運營商只執行基準轉換,可空轉換和裝箱轉換。 as運算符不能執行其他轉換,例如用戶定義的轉換,而應該使用轉換表達式來執行轉換。
通過做(A)x
你正在做一個明確的嘗試和施放的演員,如果它不能施展,將會有一個例外。
如果您使用as
它將投射或者是null
。
但是,您有自己需要的所有示例代碼,因此您可以在詢問我們已經聲明的代碼將要執行的操作之前嘗試執行此操作。
第一個嘗試立即進行轉換,所述第二個實際檢查x是否是類型A.
http://stackoverflow.com/a/702243/284240 – 2013-02-20 14:21:21
已經在這裏問:http://stackoverflow.com/questions/132445/direct-casting-vs-as-operator – Pete 2013-02-20 14:21:30
您是否嘗試過對此進行基準測試? – 2013-02-20 14:21:44