VB.NET中的operator ++ - Interlocked.Increment

时间:2011-05-30 09:43:47

标签: c# vb.net c#-to-vb.net

根据讨论here,其中一个答案似乎暗示通过使用从C#到VB.NET的代码转换器,应用于int的operator ++应该被System.Math.Max(System.Threading.Interlocked.Increment(current),current - 1))替换,I想知道这是否真的正确吗?

如果是这样,为什么这是正确的?我不认为operator ++会被实现为Interlocked.Increment操作吗?我甚至不认为它是线程安全的。我没有看到这两个人是一样的,然后为什么这个问题的答案与之相关,甚至有效?

我尝试了它并产生了正确的结果。 AFAIK,.NET没有像C ++那样的未定义行为。

有人可以澄清吗?

3 个答案:

答案 0 :(得分:3)

C#operator ++不使用互锁语义。它相当于x=x+1

答案 1 :(得分:3)

您可以在VB.Net中执行x += 1。不像x ++那么优雅,但优于x = x + 1。

Interlocked.Increment用于使您的添加操作成为线程安全的。你可能根本不需要它。

编辑:另外,如果不清楚,VB中没有++运算符,我不明白为什么,但是...... [/ p>

答案 2 :(得分:2)

不,它不是current++的正确替代品,因为current++会返回current(后递增)的未更改值,而

System.Math.Max(System.Threading.Interlocked.Increment(current),current - 1))

返回递增的值(预增量)。

我从C#到VB转换器http://www.developerfusion.com/tools/convert/csharp-to-vb/获得了相同的代码,这种差异改变了程序的行为。