【发布时间】:2010-08-25 15:57:56
【问题描述】:
只是想知道哪个更快,有什么区别。
MyClass test = someclass as MyClass;
或
MyClass 测试 = (MyClass)someclass;
【问题讨论】:
只是想知道哪个更快,有什么区别。
MyClass test = someclass as MyClass;
或
MyClass 测试 = (MyClass)someclass;
【问题讨论】:
不同之处在于as 关键字在失败时不会抛出异常,而是用null 填充左值,而用括号强制转换会抛出InvalidCastException。
【讨论】:
如果所需的转换无效,as 关键字将返回 null。在这种情况下,显式转换将引发异常。因此,我认为隐式强制转换 (as) 速度较慢,尽管它可能可以忽略不计。
【讨论】:
as 转换比前缀转换快得多。
更快?这可能永远都不重要。您必须等到出现性能分析应用程序告诉您演员阵容耗时过长的情况。
区别?
当 someclass 无法转换为 MyClass 时,会将 test 设置为 null。
MyClass test = someclass as MyClass;
当 someclass 无法转换为 MyClass 时会抛出异常。
MyClass test = (MyClass)someclass;
【讨论】:
as 转换比前缀转换更快,但不会产生可靠的结果,即。如果无法执行强制转换,则返回 null。你必须自己处理。如果无法将 T1 转换为 T2,前缀转换将引发异常。
见:blog
【讨论】: