有没有人知道Flex 3中两种类型转换方式之间的真正区别?
var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);
我更喜欢使用第二种方法,因为它会在类型转换失败时抛出Error,而第一种方法只返回null。但是还有其他差异吗?使用第一种方法可能有什么好处?
答案 0 :(得分:5)
第二种类型的投射对于顶级(http://livedocs.adobe.com/flex/2/langref/)类型具有不同的行为,例如Array(obj)不会以您描述的直接方式进行转换;如果可能的话,它会从obj创建一个新的数组,即使obj是一个数组。
我确定这会导致意外行为的时间很少,但我总是因此而使用“as”。这意味着如果我
int(str)
我知道这是“尝试转换”这个词的意思而不是“我保证是这样”的意思。
参考:从http://raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/
获得了一些确认答案 1 :(得分:2)
as
方法会返回null
。()
方法将抛出错误。如果variable
的值与MyObject
不兼容,myObject1
将包含null
,您会对null
指针错误感到惊讶(< em> 1009:当您尝试访问它时,无法访问程序中稍后某处的空对象引用的属性或方法。。如果您使用MyObject(variable)
语法进行投射,则会在同一行本身遇到类型强制错误( 1034:类型强制失败:无法将_转换为_ ) - 这是比以后在某个地方获得1009更有帮助,并想知道出了什么问题。
答案 2 :(得分:1)
我想我在本网站的某个地方看到as
比()
稍微快一点,但我再也找不到问题了。
除了已多次询问此问题之外,您还会找到更深入的答案here。
我最近在StackOverflow上搜索时发现了非常有用的[]
标记,它只允许搜索用指定标记标记的问题。所以你可以像[actionscript-3] as vs cast那样进行搜索。这里有更多搜索提示:https://stackoverflow.com/search。
不;具有讽刺意味的是,我无法找到关于性能的问题,并写下如何搜索不会丢失在我身上;)
答案 3 :(得分:0)
我认为当返回基类时,如果转换失败并且()抛出错误,则返回非null。