*微妙* VB 函数和 Convert.To* 函数之间的区别?
Posted
技术标签:
【中文标题】*微妙* VB 函数和 Convert.To* 函数之间的区别?【英文标题】:*Subtle* Differences between VB functions and Convert.To* functions? 【发布时间】:2010-10-08 15:29:18 【问题描述】:在转换类型时,我发现自己同时使用了 VB 函数和 BCL Convert.To* 方法。 例如)
Cstr()
与 Convert.ToString()
CInt()
与 Convert.ToInt32()
CDbl()
与 Convert.ToInt64()
等等……
是否有任何细微的差异需要注意?
【问题讨论】:
【参考方案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 的总结。谢谢以上是关于*微妙* VB 函数和 Convert.To* 函数之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章
int.Parse() 和 Convert To.Int32() 的区别? [复制]
Codeforces 997A Convert to Ones(思维)
Codeforces round 493 Convert to Ones