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

Has the VB.NET compiler warning BC42324 been removed in VS2013?

我最近安装了 VS2013(连同以前的 VS2010 安装)并注意到在编译相同的 VB.NET 代码时我不再收到编译器警告 'BC42324'(下面的文本)(我在 VS2010 中重新编译到确认警告仍然显示):

Using the iteration variable in a query expression may have unexpected results. Instead, create a local variable within the loop and assign it the value of the iteration variable.

MSDN 上的文档似乎表明该警告仍包含在内。我 see/don 没有看到带有以下代码的警告:

Dim Numbers = {0, 1}
For Each index In Numbers
  Dim SumPlusIndex = Aggregate x In Numbers Select x + index Into Sum()
Next

这个警告真的被删除了吗?那是怎么来的?如果不是,我的 VS2010 和 VS2013 安装之间是否存在其他可能导致差异的环境差异?

是的,这就是臭名昭著的 capture the for loop variable 错误。它已经伤害了 许多 程序员,因此 Microsoft 决定对此采取一些措施。他们解决了 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