Casting:(NewType)与Object作为NewType
可能重复:
投射vs在CLR中使用'as'关键字
这两个演员之间究竟有什么区别?
SomeClass sc = (SomeClass)SomeObject;
SomeClass sc2 = SomeObject as SomeClass;
通常情况下,他们都应该明确转换为指定的类型?
如果源类型不能转换为目标类型,前者将抛出异常。 后者将导致sc2为空引用,但也不例外。
[编辑]
我的原始答案肯定是最明显的差异,但正如Eric Lippert指出的那样,它不是唯一的答案。 其他差异包括:
最后,使用'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。