gpt4 book ai didi

vb.net - 如何抑制 VB 的 "Iteration variable shouldn' t 被用于 lambda 表达式"

转载 作者:行者123 更新时间:2023-12-04 19:20:43 26 4
gpt4 key购买 nike

我在 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 表达式进行评估。 ( This question 就是这样)

现在我的问题是,如何在表达式就地求值的情况下抑制此警告,使用 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
  • 关于vb.net - 如何抑制 VB 的 "Iteration variable shouldn' t 被用于 lambda 表达式",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3829571/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com