根据讨论here,其中一个答案似乎暗示通过使用从C#到VB.NET的代码转换器,应用于int的operator ++应该被System.Math.Max(System.Threading.Interlocked.Increment(current),current - 1))
替换,I想知道这是否真的正确吗?
如果是这样,为什么这是正确的?我不认为operator ++会被实现为Interlocked.Increment操作吗?我甚至不认为它是线程安全的。我没有看到这两个人是一样的,然后为什么这个问题的答案与之相关,甚至有效?
我尝试了它并产生了正确的结果。 AFAIK,.NET没有像C ++那样的未定义行为。
有人可以澄清吗?
答案 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/获得了相同的代码,这种差异改变了程序的行为。