2010-10-05 92 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运算符只能用于引用类型。