我在 VB.NET 中使用 LINQ,有时我会遇到这样的查询
For i = 0 To 10
Dim num = (From n In numbers Where n Mod i = 0 Select n).First()
Next
然后是警告“在 lambda 表达式中使用迭代变量可能会产生意外结果。相反,在循环中创建一个局部变量,并将迭代变量的值赋给它。”
我知道在 lambda 表达式中使用迭代变量不是一个好习惯,因为 lambda 表达式仅在需要时才计算。 (这个问题 https://stackoverflow.com/questions/227820/why-is-it-bad-to-use-a-iteration-variable-in-a-lambda-expression就是关于这个)
现在我的问题是,在使用 First()、Single()、ToList() 等结构就地计算表达式的情况下,如何抑制此警告(这只是一个警告,但我喜欢我的代码干净) .)
(声明局部变量并将迭代变量传递给它是一个选项,但我正在寻找一个干净的解决方案。)
在这种立即计算 lambda 的特殊情况下,您可以通过将迭代变量的声明移到 for 循环之外来安全地消除警告。
Dim i = 0
For i = 0 To 10
...
我确实想强调,这仅在 lambda 不逃逸 for 循环的情况下才有效(对于您的场景来说是这样)。
这里还有我写的关于这个警告的文章的详细链接(为什么它存在,如何避免它,等等......)
- http://blogs.msdn.com/b/jaredpar/archive/2007/07/26/closures-in-vb-part-5-looping.aspx http://blogs.msdn.com/b/jaredpar/archive/2007/07/26/closures-in-vb-part-5-looping.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)