Casting:(NewType)与Object作为NewType

可能重复:
投射vs在CLR中使用'as'关键字

这两个演员之间究竟有什么区别?

SomeClass sc = (SomeClass)SomeObject;
SomeClass sc2 = SomeObject as SomeClass;

通常情况下,他们都应该明确转换为指定的类型?


如果源类型不能转换为目标类型,前者将抛出异常。 后者将导致sc2为空引用,但也不例外。

[编辑]

我的原始答案肯定是最明显的差异,但正如Eric Lippert指出的那样,它不是唯一的答案。 其他差异包括:

  • 您不能使用'as'操作符来转换为不接受'null'作为值的类型
  • 您不能使用'as'将数字转换为不同的表示形式(例如,float到int)。
  • 最后,使用'as'和演员,你也会说'我不确定这是否会成功。“


    另请注意,您只能将as关键字与引用类型或可为空的类型一起使用

    即:

    double d = 5.34;
    int i = d as int;
    

    不会编译

    double d = 5.34;
    int i = (int)d;
    

    将编译。


    当演员失败时,使用“as”进行类型转换当然要快得多,因为它避免了抛出异常的花费。

    但是演员成功后它不会更快。 http://www.codeproject.com/KB/cs/csharpcasts.aspx中的图形是误导性的,因为它没有解释它所测量的内容。

    底线是:

  • 如果你期望演员成功(即失败将是例外),请使用演员。

  • 如果您不知道它是否会成功,请使用“as”运算符并测试结果为null。

  • 链接地址: http://www.djcxy.com/p/12805.html

    上一篇: Casting: (NewType) vs. Object as NewType

    下一篇: Does 'finally' always execute in Python?