【发布时间】:2010-10-08 15:29:18
【问题描述】:
在转换类型时,我发现自己同时使用了 VB 函数和 BCL Convert.To* 方法。
例如)
-
Cstr()与Convert.ToString() -
CInt()与Convert.ToInt32() -
CDbl()与Convert.ToInt64() - 等等……
是否有任何细微的差异需要注意?
【问题讨论】:
标签: vb.net function type-conversion
在转换类型时,我发现自己同时使用了 VB 函数和 BCL Convert.To* 方法。
例如)
Cstr() 与 Convert.ToString()
CInt() 与 Convert.ToInt32()
CDbl() 与 Convert.ToInt64()
是否有任何细微的差异需要注意?
【问题讨论】:
标签: vb.net function type-conversion
我刚刚发现了另一个很大的不同,我认为这里值得一提——尽管是在 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
【讨论】:
这在原则上已经被 before 覆盖了,但是是有区别的:基本上 VB 助手会为你做额外的工作来让你解析泛型会抛出异常的地方,一般但不是普遍的 VB助手更快(虽然我不知道它是否明显如此)因为它们真的只是 IL 糖。调味。
编辑:This guy 比我做得更好。
编辑 Redux:Joel Coehoorn 还推荐了 precursor to the above article,显然他在某处进行了一些基准测试。
乔尔写道:
总结是 CInt() 是一个 运算符,而 Convert.ToInt32() 是 功能。 CInt住在某处 (int)x 之间;和 转换.ToInt32(x);.
【讨论】: