我将一些 C# 代码转换为 vb.net,converter.telerik.com 将其转换为:
i--;
进入这个:
System.Math.Max(System.Threading.Interlocked.Decrement(i), i + 1)
所有的花哨是怎么回事?
Michał Piaskowski 的评论引发了以下解释:
的语义i--
在 C# 中是返回当前值i
(即发生递减之前的值)然后递减i
by one.
因此,我们需要将其转换为 VB。我们不能使用i -= 1
因为这不会返回当前值i
减量之前。所以,我们需要一个减少的操作i
但返回值i
在递减之前,类似:
Function DoPostDecrement(ByRef i As Integer) As Integer
i -= 1
Return i + 1
End Function
但这建议使用以下内容来避免编写方法来执行上述操作:
System.Math.Max(
someValueThatIsEqualToiMinusOne,
someValueThatIsEqualtoiBeforeTheDecrement
)
但VB.NET不会让你使用i -= 1
or i = i - 1
代替someValueThatIsEqualToiMinusOne
。然而,System.Threading.Interlocked.Decrement(i)
是合法的并且等于i - 1
。一旦你这样做了,因为参数是从左到右计算的,someValueThatIsEqualtoiBeforeTheDecrement
应该i + 1
(此时已执行减量i + 1
是预减值。
注意上面的方法DoPostDecrement
和System.Math.Max, System.Threading.Interlocked.Decrement
构造在多线程上下文中可以具有不同的语义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)