可能重复:
Casting: (NewType) vs. Object as NewType
Casting vs using the 'as' keyword in the CLR
这两种类型的转化有什么区别(正如我所看到的,它们并不是一直都有效):
ClassA a = (ClassA)someClassObject;
和
ClassA a = someClassObject as ClassA
答案 0 :(得分:2)
Per http://msdn.microsoft.com/en-us/library/cscsdfbt%28v=vs.71%29.aspx(强调我的):
as运算符就像一个强制转换,但它会产生null 转换失败而不是引发异常。更正式的,一个 表达形式:
expression as type
相当于:
expression is type ? (type)expression : (type)null
除了表达式只被评估一次。
答案 1 :(得分:1)
在第一种情况下,如果转换不成功,将在运行时抛出InvalidCastException。在第二种情况下,您将在结果变量中获得null
。
答案 2 :(得分:1)
第一个是投射 - 如果无法投射someClassObject
,则会抛出InvalidCastException
。
第二个不会抛出异常,但如果演员表没有成功,a
将是null
。
答案 3 :(得分:0)
将返回null并且强制转换将从内存
中异常