我最近安装了VS2013(与之前的VS2010安装一起)并注意到我不再收到编译器警告' BC42324' (编译相同的VB.NET代码时)(我在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安装之间可能存在其他可能导致差异的环境差异吗?
答案 0 :(得分:4)
是的,那是臭名昭着的capture the for loop variable错误。它已经咬了许多程序员,所以微软决定对此做点什么。他们为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