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
我最近安装了 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