是否已在VS2013中删除VB.NET编译器警告BC42324



我最近安装了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循环变量错误。它咬了许多程序员,所以微软决定做点什么。他们解决了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

最新更新