可能重复:
使用CLR中的'as'关键字进行转换
这两个演员之间究竟有什么区别?
SomeClass sc = (SomeClass)SomeObject;
SomeClass sc2 = SomeObject as SomeClass;
Run Code Online (Sandbox Code Playgroud)
通常,它们都应该显式转换为指定的类型?
den*_*nny 27
另请注意,您只能将as关键字与引用类型或可空类型一起使用
即:
double d = 5.34;
int i = d as int;
Run Code Online (Sandbox Code Playgroud)
不会编译
double d = 5.34;
int i = (int)d;
Run Code Online (Sandbox Code Playgroud)
将编译.
Joe*_*Joe 11
使用"as"进行类型转换当然会在转换失败时更快,因为它避免了抛出异常的费用.
但是当演员成功时,它并不快.http://www.codeproject.com/KB/cs/csharpcasts.aspx上的图表具有误导性,因为它无法解释它的测量结果.
底线是:
如果你期望演员阵容成功(即失败将是例外),使用演员.
如果您不知道它是否会成功,请使用"as"运算符并将结果测试为null.
好吧,“as”运算符“帮助”您将问题埋得更低,因为当提供不兼容的实例时,它将返回 null,也许您会将其传递给一个方法,该方法会将其传递给另一个方法,依此类推,最后您'将得到一个 NullReferenceException 这将使您的调试更加困难。
不要滥用它。在 99% 的情况下,直接转换运算符更好。