*微妙* 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* 函数之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

VB中随即函数为啥每次的得数都是一样的

int.Parse() 和 Convert To.Int32() 的区别? [复制]

Codeforces 997A Convert to Ones(思维)

Codeforces round 493 Convert to Ones

Python int too large to convert to C long

Python convert list string to list