5

我在 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 表达式仅在需要时才计算。(这个问题是关于那个)

现在我的问题是,在表达式被就地评估的情况下,如何使用 First()、Single()、ToList() 等结构来抑制这个警告。(这只是一个警告,但我喜欢我的代码干净.)

(声明一个局部变量并将迭代变量传递给它是一种选择,但我正在寻找一个干净的解决方案。)

4

1 回答 1

5

在这种立即评估 lambda 的特殊情况下,您可以通过将迭代变量的声明移到 for 循环之外来安全地消除警告。

Dim i = 0
For i = 0 To 10 
 ...

我确实想强调,这仅在 lambda 不逃脱 for 循环时才有效(对于您的场景是正确的)。

另外这里是我写的关于这个警告的一篇文章的详细链接(它为什么存在,如何避免它,等等......)

于 2010-09-30T21:08:08.220 回答