前置类型转换和“as”转换之间的差异

时间:2012-01-23 11:16:11

标签: .net

  

可能重复:
  Casting: (NewType) vs. Object as NewType
  Casting vs using the 'as' keyword in the CLR

这两种类型的转化有什么区别(正如我所看到的,它们并不是一直都有效):

ClassA a = (ClassA)someClassObject;

ClassA a = someClassObject as ClassA

4 个答案:

答案 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并且强制转换将从内存

中异常