【问题标题】:*Subtle* Differences between VB functions and Convert.To* functions?*微妙* VB 函数和 Convert.To* 函数之间的区别?
【发布时间】:2010-10-08 15:29:18
【问题描述】:

在转换类型时,我发现自己同时使用了 VB 函数和 BCL Convert.To* 方法。
例如)

  • Cstr()Convert.ToString()
  • CInt()Convert.ToInt32()
  • CDbl()Convert.ToInt64()
  • 等等……

是否有任何细微的差异需要注意?

【问题讨论】:

    标签: vb.net function type-conversion


    【解决方案1】:

    我刚刚发现了另一个很大的不同,我认为这里值得一提——尽管是在 OP 之后几年!当True 时,CInt({Boolean expression}) 的计算结果为 -1,而 Convert.ToInt<n> 的计算结果为 1。

    这可以找出任何在数学评估中使用过前者的人,例如:

    For i As Integer = 0 To 1 - CInt(processThirdItem) 'Evaluates to -1 (1 - -1 = 2)
        'Do stuff...
    Next
    

    因此,除非您将运算符从 - 更改为 +,否则使用 Convert.ToInt32 代替 CInt 将不起作用。

    当然,.NET 的短路 If 函数现在提供了一种更好的方法来做到这一点:

    For i As Integer = 0 to If(processThirdItem, 2, 1)
        'Do stuff...
    Next 
    

    【讨论】:

      【解决方案2】:

      这在原则上已经被 before 覆盖了,但是是有区别的:基本上 VB 助手会为你做额外的工作来让你解析泛型会抛出异常的地方,一般但不是普遍的 VB助手更快(虽然我不知道它是否明显如此)因为它们真的只是 IL 糖。调味。


      编辑:This guy 比我做得更好。

      编辑 Redux:Joel Coehoorn 还推荐了 precursor to the above article,显然他在某处进行了一些基准测试。

      乔尔写道:

      总结是 CInt() 是一个 运算符,而 Convert.ToInt32() 是 功能。 CInt住在某处 (int)x 之间;和 转换.ToInt32(x);.

      【讨论】:

      • 呵呵:您在我研究我的帖子时进行了编辑——主要是在寻找(但未能找到)我提到的基准链接。这很有趣,因为您的链接是同一作者对我发布的链接的跟进。如果您再次编辑以包含两者,我将删除我的帖子以支持您的帖子。
      • 完成了,但如果你编辑它我不会生气的 :)
      • 我喜欢 Joel 的总结。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      相关资源
      最近更新 更多