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

问题描述

|| 通过这里的讨论,答案之一似乎暗示着,使用从C#到VB.NET的代码转换器,应用于int的operator ++应该替换为
System.Math.Max(System.Threading.Interlocked.Increment(current),current - 1))
,我想知道这是否正确? 如果是这样,那为什么正确呢?我不认为operator ++会被实现为Interlocked.Increment操作?我什至都不认为它是线程安全的。我看不到这两个是谁相同,然后为什么链接到该问题的答案甚至起作用? 我尝试过,它会产生正确的结果。 AFAIK,.NET没有像C ++那样的不确定行为。 有人可以澄清吗?     

解决方法

        您可以在VB.Net中执行
x += 1
。不如x ++优雅,但比x = x + 1好。 Interlocked.Increment用于使添加操作具有线程安全性。您可能根本不需要它。 编辑:此外,如果不清楚,VB中没有++运算符,我不知道为什么,但是...     ,        C#operator ++不使用互锁的语义。相当于
x=x+1
。     ,        不,这不是
current++
的正确替代,因为
current++
会返回
current
的不变值(后递增),而
System.Math.Max(System.Threading.Interlocked.Increment(current),current - 1))
返回增加的值(预增加)。 我从C#到VB转换器http://www.developerfusion.com/tools/convert/csharp-to-vb/上得到了相同的代码,而这种差异改变了程序的行为。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...