2010-10-05 63 views
1

可能重複:
Direct casting vs 'as' operator?
Casting vs. using the as keyword in the CLRC#:有沒有爲Type(類型)的東西之間的差值Vs東西

在C#中,什麼差別

var obj = (Array)Something 

vs

var obj = Something as Array 
+3

這是許多[問題](http://stackoverflow.com/questions/496096/casting-vs-using-the-as-keyword-in-the-clr)在這裏。這些天沒有人閱讀過文檔嗎? – 2010-10-05 08:29:55

+1

在搜索此網站時遇到'[c#] typecast'顯示此問題:http://stackoverflow.com/questions/3724051/what-is-difference-between-normal-typecasting-and-using-as-keyword-closed而其他問題又被關閉了。投票結束 – 2010-10-05 08:33:27

回答

6

如果無效,首先會拋出CastException。第二個只會導致obj = null。

+1

第二個結果是否正確? :) – Arcturus 2010-10-05 08:31:15

+1

沒有第二個會導致正確類型的對象或null。你在想'是'運算符,Arcturus。 – 2010-10-05 08:32:16

+0

不行,第二個會導致obj變量沒有被分配任何值,因爲轉換失敗。因此,obj將爲null – danijels 2010-10-05 08:32:51

1
var obj = (Array)Something 

將拋出InvalidCastExcpetion如果Something不是從System.Array衍生或不具有System.Array一個conversion operator。這可以與值類型和引用類型一起使用。

var obj = Something as Array 

將返回nullobjnull)如果Something不是從System.Array衍生或不具有System.Array一個conversion operator。這隻能用於引用類型。你需要box你值類型第一。

1

以及Danijels答案

第一個可以用於任何類型。

as運算符只能用於引用類型。