C#中的as关键字

今天在看Silverlight的时候,发现as关键字被大量的使用了。由于对C#的认识肤浅,没有太明白这个关键字和括号转译有啥区别,所以就去网上查了查。

MSDN的解释是:
--------
as 运算符用于执行可兼容类型之间的转换。
as 运算符类似于类型转换,所不同的是,当转换失败时,as 运算符将产生空,而不是引发异常。在形式上,这种形式的表达式:
expression as type
等效于:

expression is type ? (type)expression : (type)null
只是 expression 只被计算一次。

请注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来代替其执行。

----------

所以这里的意思就是说,as运算符和括号类型转换的区别是,括号类型转换会在转换失败的时候抛出异常,而as不抛异常,只是返回一个null。所以在as之后的变量要判断是否为null。

既然C#已经有了括号的类型转换,为啥还加一个as呢?是多此一举吗?
引用一篇文章(C#中"is" vs "as"

如果用括号的话:
---------
if (cls1 is Class2)
{
Class2 cls2 = (Class2)cls1;
}
else
System.Console.WriteLine("Error 2!");
}
-------
这里判断了两次类型的转化,第一次是"is"的时候,第二次则是转换的时候。
而如果使用as的话:
-------
Class2 cls2 = cls1 as Class2;
if (cls2!=null)
System.Console.WriteLine("Ok");
else
System.Console.WriteLine("Error!");
-------
这里只有在as的时候类型检查了一次。

一直是写:
if (cls1 is Class2)
{
Class2 cls2 = cls1 as Class2
//....
}

突然发现这种写法很蠢。

 

感谢您关注我的个人博客!
为了您的更好的阅读和留言,建议您注册用户,这样您可以获得更大的权限,以及更方便的留言。
注册只需要一分钟的时间。但是您需要提供您的邮箱。注册后,密码会自动发到您的邮箱,请在第一次登录时修改。
我承诺不会将您的Email泄露给他人,或者发送垃圾邮件。

用户登录

我的微博

feedsky
抓虾
google reader
my yahoo
newsgator
bloglines
鲜果
哪吒
有道
QQ邮箱
九点
帮看