swo*_*978 7 c# vb.net c#-to-vb.net
我将一些c#代码转换为vb.net,转换器.telerik.com转为:
i--;
Run Code Online (Sandbox Code Playgroud)
进入这个:
System.Math.Max(System.Threading.Interlocked.Decrement(i), i + 1)
Run Code Online (Sandbox Code Playgroud)
什么花哨的东西怎么样?
jas*_*son 10
MichałPiaskowski的评论引发了以下解释:
i--C#中的语义是返回当前值i(即减量发生前的值),然后减i1.
所以,我们需要将其转换为VB.我们不能使用,i -= 1因为这不会返回i减量前的当前值.所以,我们需要一个会递减的操作,i但会在递减i之前返回值,例如:
Function DoPostDecrement(ByRef i As Integer) As Integer
i -= 1
Return i + 1
End Function
Run Code Online (Sandbox Code Playgroud)
但这表明使用以下内容避免必须编写一个方法来执行上述操作:
System.Math.Max(
someValueThatIsEqualToiMinusOne,
someValueThatIsEqualtoiBeforeTheDecrement
)
Run Code Online (Sandbox Code Playgroud)
但VB.NET不会让你使用i -= 1或i = i - 1代替someValueThatIsEqualToiMinusOne.但是,System.Threading.Interlocked.Decrement(i)是合法的,等于价值i - 1.一旦这样做,因为参数从左到右进行评估,someValueThatIsEqualtoiBeforeTheDecrement应该是i + 1(在那一点上,已经执行的减量i + 1是预减量值.
请注意,上述方法DoPostDecrement和System.Math.Max, System.Threading.Interlocked.Decrement构造在多线程上下文中可能具有不同的语义.