我在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#相同的结果吗?
答案 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#代码相同。但它包含无意义的,无用的指令,不应该保留在生产代码中。