【问题标题】:object casting in C# [duplicate]C#中的对象转换[重复]
【发布时间】:2010-08-25 15:57:56
【问题描述】:

可能重复:
Casting: (NewType) vs. Object as NewType

只是想知道哪个更快,有什么区别。

MyClass test = someclass as MyClass;

MyClass 测试 = (MyClass)someclass;

【问题讨论】:

    标签: c# casting


    【解决方案1】:

    不同之处在于as 关键字在失败时不会抛出异常,而是用null 填充左值,而用括号强制转换会抛出InvalidCastException

    【讨论】:

    • 现在有一个有意义的异常比以后的 NullReferenceException 要好得多。所以我会说坚持常规演员阵容,除非你在'as'演员之后立即处理无效性。
    • 另请注意,您不能将 as 关键字与值类型一起使用。
    【解决方案2】:

    如果所需的转换无效,as 关键字将返回 null。在这种情况下,显式转换将引发异常。因此,我认为隐式强制转换 (as) 速度较慢,尽管它可能可以忽略不计。

    【讨论】:

    • 不,as 转换比前缀转换快得多。
    • 有趣。您这样做有技术原因吗?
    • 您可以在我在回答中提供的代码项目链接中看到技术原因。
    【解决方案3】:

    更快?这可能永远都不重要。您必须等到出现性能分析应用程序告诉您演员阵容耗时过长的情况。

    区别?

    someclass 无法转换为 MyClass 时,会将 test 设置为 null

    MyClass test = someclass as MyClass; 
    

    someclass 无法转换为 MyClass 时会抛出异常。

    MyClass test = (MyClass)someclass;
    

    【讨论】:

      【解决方案4】:

      as 转换比前缀转换更快,但不会产生可靠的结果,即。如果无法执行强制转换,则返回 null。你必须自己处理。如果无法将 T1 转换为 T2,前缀转换将引发异常。

      见:blog

      codeproject

      【讨论】:

      • 我认为 as 比较慢....
      • gj 投反对票,无论是谁。
      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多