有人知道Flex 3中类型转换的两种方式之间的真正区别吗?
var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);
我更喜欢使用第二种方法,因为当类型转换失败时它会抛出一个错误,而第一种方法只会返回null。但是还有其他区别吗?也许使用第一种方法有什么优点吗?
有人知道Flex 3中类型转换的两种方式之间的真正区别吗?
var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);
我更喜欢使用第二种方法,因为当类型转换失败时它会抛出一个错误,而第一种方法只会返回null。但是还有其他区别吗?也许使用第一种方法有什么优点吗?
int(str)
我知道这里的cast是“尝试转换”的意思,而不是“我保证它是”。
参考:http://raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/,已经得到了一些确认。
as
方法在强制类型转换失败时返回 null
。()
方法在强制类型转换失败时会抛出错误。如果 variable
的值与 MyObject
不兼容,则使用 myObject1
存储的值将为 null
,并且当您尝试访问它时,在程序的后续某个位置会出现一个 null
指针错误(1009: 无法访问 null 对象引用的属性或方法)。而如果您使用 MyObject(variable)
语法进行强制类型转换,则会在同一行上得到一个类型强制错误(1034:类型强制失败:无法将 _ 转换为 _)- 这比在稍后出现 1009 并想知道出了什么问题更有帮助。
as
强制转换的优势。 - Amarghosh我记得在这个网站上看到过一个问题,说as
比()
稍微快一点,但我现在找不到那个问题了。
除此之外,这个问题已经被问了很多次,你可以在这里找到更深入的答案。
最近我在 StackOverflow 上搜索时发现了非常有用的[]
标签,它允许只搜索带有指定标签的问题。所以你可以进行这样的搜索[actionscript-3] as vs cast。这里还有更多的搜索技巧:https://stackoverflow.com/search。
而且,我没有找到关于性能的问题,却写了如何搜索的方法,这其中的讽刺并没有逃过我的眼睛 ;)
我认为当强制类型转换失败并且()引发错误时,as返回基类而不是null。
[]
,其余情况使用()
。 - Amarghosh