【问题标题】:How to suppress VB's "Iteration variable shouldn't been used in lambda expression"如何抑制VB的“迭代变量不应该在lambda表达式中使用”
【发布时间】:2010-09-30 10:04:37
【问题描述】:

我在 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() 等结构就地评估表达式的情况下,如何抑制此警告。(这只是一个警告,但我喜欢我的代码很干净。)

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

【问题讨论】:

  • 为什么你在寻找“别的东西”?
  • 在一个三行块中(1.For 2.DoSomething(LinqExpression) 3. Next)有第四行 Dim localVar = iterationVar 并不好。但似乎,这是最好的选择

标签: vb.net lambda iteration suppress-warnings


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,这也是一个选项。 (这不是最好的,但也许这个解决方案没有最佳选择)
猜你喜欢
  • 2010-09-18
  • 2016-10-16
  • 2013-09-10
  • 2012-12-28
  • 2010-10-20
  • 1970-01-01
相关资源
最近更新 更多