有人知道Flex3中两种类型转换方式的真正区别吗?
var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);我更喜欢使用第二种方法,因为当类型转换失败时,它会抛出一个错误,而第一种方法只会返回null。但是还有其他的区别吗?也许使用第一种方法有什么好处?
发布于 2009-11-27 21:13:00
第二种类型的强制转换对于顶层(http://livedocs.adobe.com/flex/2/langref/)类型有不同的行为,例如,数组( obj )不会以您所描述的直接方式进行强制转换;如果可能,它会从obj创建一个新的数组,即使obj是一个数组。
我确信这会导致意想不到的行为的情况很少见,但我总是因为这个原因而使用"as“。意思是如果我这么做了
int(str) 我知道这是一种“尝试转换”的意思,而不是“我保证它是”的意思。
ref:从http://raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/那里得到了一些确认
发布于 2009-11-26 20:26:25
as方法将返回null。()方法将抛出错误。如果variable的值与MyObject不兼容,则myObject1将包含null,并且您将看到null指针错误(1009 :无法访问空对象引用的属性或方法)。稍后在程序中的某个位置,当您尝试访问它时。当你使用MyObject(variable)语法进行类型转换时,你会在同一行中得到一个类型强制错误(_1034 :类型强制失败:无法将_转换为__) --这比后来在某个地方得到一个1009并想知道哪里出了问题更有帮助。
发布于 2009-11-27 22:44:07
我想我在这个网站上读到过as比()稍微快一点,但是我找不到这个问题了。
除了这个问题已经被问了很多次之外,你还会找到一个更深入的答案here。
我最近在StackOverflow上搜索时发现了一个非常有用的[]标签,它只允许搜索带有指定标签的问题。所以你可以像[actionscript-3] as vs cast一样进行搜索。这里有更多的搜索技巧:https://stackoverflow.com/search。
不;讽刺的是,我找不到关于性能的问题,也没有写出关于如何搜索的问题;)
https://stackoverflow.com/questions/1803339
复制相似问题