是的,这就是臭名昭著的捕获for循环变量错误。它咬了许多程序员,所以微软决定做点什么。他们解决了
我最近安装了VS2013(与以前的VS2010安装一起),并注意到在编译相同的VB.NET代码时,我不再收到编译器警告"BC42324"(文本如下)(我在VS2010中重新编译以确认警告仍然显示):
在查询表达式中使用迭代变量可能具有意外的结果。相反,在循环中创建一个局部变量并将迭代变量的值分配给它。
MSDN上的文档似乎表明该警告仍然包含在内。我看到/没有看到以下代码的警告:
Dim Numbers = {0, 1}
For Each index In Numbers
Dim SumPlusIndex = Aggregate x In Numbers Select x + index Into Sum()
Next
这个警告真的被删除了吗?这是怎么回事?如果没有,我的VS2010和VS2013安装之间是否存在其他可能导致差异的环境差异?
For Each
循环,但没有解决For
循环。你仍然可以触发这样的警告:
Sub Main()
For ix As Integer = 1 To 10
Dim dlg = Sub()
Console.WriteLine(ix) '' Eek!
End Sub
'' etc...
Next
End Sub