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

2023-12-19

我在 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(使用前将#替换为@)

如何抑制VB的“迭代变量不应在lambda表达式中使用” 的相关文章

随机推荐

  • 值得使用 sqlalchemy-migrate 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个使用 sqlalchemy 的 Web 应用程序 在 Pylons 内 我需要有效地更改架构 以便能够至少每天 甚至更多 更改生产版本
  • UDP打洞帮助

    我正在尝试使用点对点将互联网网络添加到我的游戏中 我已经实现了仅 LAN 版本 它使用 NET 的对等类在本地网络内进行连接 我意识到我需要使用 UDP 打洞来建立与防火墙后面的其他客户端的连接 这就是我开始实施它的方式 该服务器是一个 H
  • R 调用的 C 代码不断崩溃

    下面是我编写的 C 代码的一部分 功能foo是在 R 中调用 代码不断导致 R 崩溃 我将问题范围缩小到这个outer 函数 用于计算外部和或差 注意被注释掉的部分 如果我不注释掉 该函数将导致R崩溃如果每个数组包含超过 1000 个数据点
  • 创建允许字符串参数(字符串索引)的类索引器operator[]

    我想用 C 创建一个类 该类必须使用集合进行管理 好的 没问题 我当然想使用operator 但是 在这种情况下 我的愿望是不按位置索引 而是按名称 gt 这意味着使用字符串索引器 看来这种东西对我的编译器来说不太好 In hpp clas
  • 如何在 ChartJS 中使折线图覆盖在条形图上

    我正在使用 leighquince 叉子chartjs https github com leighquince Chart js在 v1 01 beta 5 中 因为我可以叠加两个图表 当我尝试叠加折线图和条形图时 折线图位于条形图下方
  • 使用 LINQ Contains 与 SqlMethods.Like

    如何在 LINQ 查询中复制以下结果而不调用帮助器库 System data Linq SqlClient Where SqlMethods Like e POSITION A FGL 7 如果可能的话 我希望这个查询更加纯粹的 LINQ
  • 在禁用的控件上显示工具提示

    我试图在鼠标悬停在禁用的控件上时显示工具提示 由于禁用的控件不处理任何事件 因此我必须在父窗体中执行此操作 我选择通过处理来做到这一点MouseMove父窗体中的事件 这是完成这项工作的代码 void Form1 MouseMove obj
  • Java 修改 foreach 中的元素

    我正在自学Java 因此下面的代码除了学习 测试之外没有其他功能 本质上 我试图在 foreach 循环中修改整数数组的元素 即 将它们减半 我应该注意的是 我并没有重新排序 添加或删除元素 而是将元素重新排序 只是改变他们的价值观 这是我
  • 替换属性以提高性能

    情况 如同这个问题 https stackoverflow com questions 4963036 python how to replace a property with a regular attribute 我想更换一个属性 与
  • IOS 13 CNContacts 不再检索所有联系人

    我有一个应用程序可以与 CNContacts 框架完美配合 一直到 IOS 12 我目前正在使用 IOS 13 beta 对其进行测试 但它完全损坏了 我已检查联系人权限并删除该应用程序并重新允许权限 这是我用来检索所有联系人的代码 NSE
  • 为什么局部变量不允许使用 volatile 关键字?

    考虑一下片段 如果在主线程中 我将其放在method volatile CountDownLatch latch new CountDownLatch 3 new Thread new ProcessThread Worker1 latch
  • 营销人员的 Sitecore Web 表单 2.4 内容交付服务器上的文件上传错误 (WFFM)

    营销人员网络表单 2 4 问题 情况 当从内容交付服务器提交表单时 我在带有文件上传字段的表单上遇到技术错误 到目前为止 我可以确定问题发生在 CD 服务器上 因为没有引用 master 数据库 我很欣赏 WFFM 文档说 FileUplo
  • IoC 容器和领域驱动设计

    我一直在寻找在域驱动设计中使用 IoC 容器的指南 不幸的是 埃文的书没有触及这个主题 我在互联网上能找到的唯一实质性指导方针是 马洛维奇的许多观点都是常识 但我对其中的一些观点感到担忧 他建议 IoC 容器应该仅用于解析服务 并且使用 I
  • C++ 中的 make_pair()

    我正在做leetcode的第337题 这是我实现的代码 Definition for a binary tree node struct TreeNode int val TreeNode left TreeNode right TreeN
  • 如何在Python中将数组字符串转换为数组[重复]

    这个问题在这里已经有答案了 我试图将存储在 mysql 数据库中的数组 作为字符串 转换为 python 中的标准数组 我的意思的一个例子是 这是我从数据库中得到的 a b c d e this is a string in the for
  • 如何将 C/C++ 应用程序移植到旧版 Linux 内核版本

    好吧 这只是一个有趣的练习 但是为一些较旧的 Linux 系统编译程序不会太难 不是吗 我可以访问几个运行 Linux 的古老系统 也许看看它们在负载下的表现会很有趣 举个例子 我们想要使用一些线性代数Eigen http eigen tu
  • phpmyadmin 导出数据库给出 html 文档错误,名称为 sql

    当我从 phpmyadmin 导出数据库时 它给了我 sql html 文档 我尝试过自定义导出和快速导出 并且还使用过 chrome 和 mozilla 浏览器 我使用的是 Ubuntu 14 04 请帮忙 我已经在这上面浪费了一整夜了
  • 如何在没有不成对的代理字符的情况下将表情符号等字符编码为 UTF8?

    我有包含各种字符的字符串需要写入 Google BigQuery 这需要严格的 UTF8 字符串 当尝试使用各种表情符号输入编写字符串时 我收到错误 java lang IllegalArgumentException Unpaired s
  • 如何设置默认视图位置(Cesium 1.6)

    我想为 cesium 应用程序设置默认视图 主页位置 我不只是想飞到那个地点一次 我希望将位置设置为默认 主页 以便它可以在应用程序的其他地方使用 例如在里面主页按钮 http cesiumjs org Cesium Build Docum
  • 如何抑制VB的“迭代变量不应在lambda表达式中使用”

    我在 VB NET 中使用 LINQ 有时我会遇到这样的查询 For i 0 To 10 Dim num From n In numbers Where n Mod i 0 Select n First Next 然后是警告 在 lambd