*微妙* VB函数和Convert.To *函数之间的差异?

时间:2009-02-19 16:40:07

标签: vb.net function type-conversion

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

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

是否应该注意微妙差异?

2 个答案:

答案 0 :(得分:10)

原则上已经涵盖了before,但是确实存在差异:基本上VB助手会为你做额外的工作来解析泛型会抛出异常的位置,一般但不是普遍的VB辅助工具更快(虽然我不知道它是否显着)因为它们只是IL糖。品尝季节。


编辑:This guy比我更好地覆盖它。

编辑Redux:Joel Coehoorn也推荐了precursor to the above article,显然在某个地方有一些基准测试。

Joel写道:

  

摘要是CInt()是一个   运算符,而Convert.ToInt32()是一个   功能。 CInt生活在某个地方   之间(int)x;和   Convert.ToInt32(X);

答案 1 :(得分:2)

我刚刚发现了另一个很大的不同之处,我认为值得一提 - 尽管OP已经过了几年! CInt({Boolean expression})True评估为-1,而Convert.ToInt<n>评估为1。

这可以让任何人在数学评估中使用前者,EG:

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