Interlocked.Increment()在VisualBasic.Net中运行良好

时间:2014-05-19 03:44:37

标签: vb.net collections

我在c#

中编写了代码
        public void CopyTo(ICollection ObjectCollection, Array Objects, int index)
    {
        foreach (object current in ObjectCollection )
        {
            Objects.SetValue (current, index++);
        }
    }

当我使用转换器翻译到Vb.net时,我得到以下代码

Public Sub CopyTo(ObjectCollection As ICollection, Objects As Array, index As Integer)
For Each current As Object In ObjectCollection
    Objects.SetValue(current, System.Math.Max(System.Threading.Interlocked.Increment(index),index - 1))
Next

End Sub

我的问题: - Vb.net方法会产生与C#相同的结果吗?

1 个答案:

答案 0 :(得分:0)

依靠自动转换器代码通常是个坏主意。编译您不理解的代码是获取错误和意外行为的可靠方法。在这种情况下,转换器生成了无意义的代码,这些代码将被编译,但包含很多非常必要的代码。

这里的主要问题是C#具有++运算符,它使内联变量递增,而VB没有可比运算符。这意味着与C#相当的VB代码如下所示:

 For Each current As Object In ObjectCollection
    index = index + 1
    Objects.SetValue(current, index)
 Next

简单,对吧?但似乎转换器寻找的内联等价于C#的++,并提出了Interlocked.Increment,它用于线程安全的原子操作,并且在这里是无关紧要的。此外,Math.Max用法(总是只返回第一个值)是奇怪的,我猜测是由于一些传输错误的构建逻辑。

所以是的,VB代码在功能上可能与C#代码相同。但它包含无意义的,无用的指令,不应该保留在生产代码中。