【问题标题】:flex3 type castingflex3型铸造
【发布时间】:2009-11-26 12:12:40
【问题描述】:

有人知道 Flex 3 中两种类型转换的真正区别吗?

var myObject1:MyObject = variable as MyObject;
var myObject2:MyObject = MyObject(variable);

我更喜欢使用第二种方法,因为它会在类型转换失败时抛出错误,而第一种方法只会返回 null。但是还有其他区别吗?使用第一种方法可能有什么好处?

【问题讨论】:

    标签: actionscript-3 apache-flex flex3


    【解决方案1】:

    第二种类型的转换对于顶级(http://livedocs.adobe.com/flex/2/langref/)类型具有不同的行为,例如Array(obj) 不会以您描述的直接方式进行转换;如果可能,它会从 obj 创建一个新数组,即使 obj 是一个数组。

    我确信这会导致意外行为的情况很少见,但出于这个原因,我总是使用“as”。这意味着如果我这样做了

    int(str) 
    

    我知道这是“尝试转换”这个词的意思,而不是“我保证它是”的意思。

    ref:从http://raghuonflex.wordpress.com/2007/07/27/casting-vs-the-as-operator/得到了一些确认

    【讨论】:

    • 所以as 用于数组,() 用于其余部分。
    • 我总是使用“as”来进行投射。
    【解决方案2】:
    • 如果转换失败,as 方法将返回 null
    • 如果转换失败,() 方法会抛出错误。

    如果variable 的值与MyObject 不兼容,myObject1 将包含null 并且您会对null 指针错误感到惊讶(1009:无法访问属性或方法的空对象引用。)稍后在程序中的某个位置尝试访问它时。如果您使用MyObject(variable) 语法进行强制转换,您将在同一行本身收到类型强制错误(1034 : Type Coercion failed: cannot convert _ to _) - 这更有帮助而不是稍后在某个地方收到 1009 并想知道出了什么问题。

    【讨论】:

    • 是的,这就是我在问题中所说的。我想知道是否还有其他差异,因为我真的不知道'as'方法的优势是什么......
    • 没有我能想到的优点 - 我总是使用第二个。
    • 有一些副作用: Array(obj) 不会以您描述的直接方式进行转换;如果可能,它会从 obj 创建一个新数组,即使 obj 是一个数组。我确信这会导致意外行为的情况很少见,但出于这个原因,我总是使用“as”。这意味着如果我执行 int(str) 我知道它是“rebo​​x”意义上的演员,而不是“我保证它是”意义上的演员。
    • +1 表示数组。您应该将其发布为答案。这正是 OP 所要求的——as 铸造的优势。
    【解决方案3】:

    我想我在这个网站的某个地方读到 as() 稍微快一点,但我再也找不到问题了。

    除了这个问题已经被问过很多次了,你会发现一个更深入的答案here

    我最近在 StackOverflow 上搜索时发现了非常有用的 [] 标签,它只允许搜索带有指定标签的问题。所以你可以搜索[actionscript-3] as vs cast。这里还有更多搜索提示:https://stackoverflow.com/search

    没有;具有讽刺意味的是,我找不到有关性能的问题并写下有关如何搜索的内容,这对我来说并没有丢失;)

    【讨论】:

      【解决方案4】:

      我认为 as 在转换失败并且 () 抛出错误时返回基类而不是 null。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 2013-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多