加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 如何抑制VB的“迭代变量不应该在lambda表达式中使用”

发布时间:2020-12-17 07:19:46 所属栏目:百科 来源:网络整理
导读:我在VB.NET中使用LINQ,有时我会遇到类似的查询 For i = 0 To 10 Dim num = (From n In numbers Where n Mod i = 0 Select n).First()Next 然后它会出现警告“在lambda表达式中使用迭代变量可能会产生意外结果.相反,在循环中创建一个局部变量并为其赋值迭代变
我在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读