重现捕获迭代变量问题

2023-11-29

我正在重读 Nutshell 中的 c# 5.0 中有关捕获迭代变量的部分(第 138 页),并且我尝试在 c# 4.0 和 c# 5.0 上重现以下代码,但直到现在才希望发现差异

using System;
class Test
{
    static void Main()
    {      
        Action[] actions = new Action[3];
        int i = 0;
        foreach (char c in "abc")
            actions[i++] = () => Console.Write(c);
        for (int j = 0; j < 3; j++)
        {
            actions[j]();
        }
        foreach (Action a in actions) a();    
        Console.ReadLine(); 
    }
}

Note 我有 Visual studio 2012(安装了 .net 4.0 和 4.5),并且在尝试重现问题时更改了目标框架

Update为了更多地解释这个问题,c# 4.0 的输出将与 c# 5.0 不同
我知道由于更新到最新版本的 C# 编译器,这可能不太有用

谁能告诉我如何重现这个问题?


您无法重现它,因为您正在更改 .Net 框架的版本,但没有更改编译器。您始终使用 C# v5.0,它解决了以下问题foreach循环。你可以看到这个问题for但循环:

Action[] actions = new Action[3];
int i = 0;

for (int j = 0; j < "abc".Length; j++)
    actions[i++] = () => Console.Write("abc"[j]);
for (int j = 0; j < 3; j++)
{
    actions[j]();
}
foreach (Action a in actions) a();
Console.ReadLine();

要使用旧的编译器,您需要旧的 VS 版本。在这种情况下,查看您的代码中断foreach你需要在VS 2010中测试它(我是在本地测试的)。


您可能想尝试更改编译器的语言版本(正如 xanatos 在评论中建议的那样),但这并不使用旧的编译器。它使用相同的编译器,但限制您使用特定功能:

因为每个版本的 C# 编译器都包含对语言规范的扩展,/langversion不提供与早期版本的编译器等效的功能。

From /langversion(C# 编译器选项)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重现捕获迭代变量问题 的相关文章

随机推荐

  • TypeScript 类型特定字符的字符串

    假设我想允许使用十六进制字符串 所以唯一允许的值为 0 9a f TypeScript 有没有办法定义只接受某些字符串的类型字符串 IE valid const valid HexString 123abc invalid const in
  • System.DateTime.Now 和 System.DateTime.Today 之间的区别

    谁能解释一下两者之间的区别System DateTime Now and System DateTime Today在 C NET 中 如果可能的话 各有利弊 DateTime Now返回一个DateTime由运行代码的计算机的本地日期和时
  • Google Apps 脚本 - MailApp

    我想使用 Google Apps 脚本发送一封带有replyTo 和附件的电子邮件 但我只找到了这两种方法 它们分别执行我想要的操作 sendEmail recipient subject body options sendEmail to
  • Java GraphTraversal 输出 Gremlin 查询

    如何从 Java 输出 Gremlin 查询GraphTraversal目的 默认输出 graphTraversal toString 好像 HasStep label eq brand name eq Nike status within
  • 将 int 转换为 hex,然后转换为 00 00 00 00 的格式

    我有一个递增的整数 然后我想要十六进制 所以我像这样进行转换 myInt ToString X 然后我需要一个格式为 00 00 00 00 的字符串 但我无法找到一种方法将我现在拥有的十六进制字符串转换为这种格式 使用 Linq 查询 您
  • 在Android中搜索ListView项目后,始终打开ListView的第一个项目(问题)

    当我打开搜索到的项目时 它打开的是 ListView 的第一个项目 而不是搜索到的项目 即使搜索并成功找到该项目 让我举几个例子 如果我搜索Arrow 我可以得到Arrow但当点击时Arrow它将会Almost Human Almost H
  • WebSphere liberty 类默认加载 PARENT LAST

    我一直在研究使用 WebSphere 的 Liberty 配置文件作为一种轻量级替代方案 以替代在我的本地计算机上部署成熟的 WebSphere 实例 我知道 这有点晚了 我不明白的一件事 如何将 Parent Last 类加载设置为默认
  • DELIMITER // 在触发器中起什么作用?

    DELIMITER 它有什么用呢 它将语句分隔符从 to 这样你就可以写 在你的触发器定义中 MySQL 客户端不会将其误解为意味着你已经完成了它 注意 改回来的时候 DELIMITER not DELIMITER 正如我所看到的人们尝试做
  • 将矢量世界地图添加到 R 中的光栅动画

    我用以下内容创建了一个动画animate的功能raster包并想在其上添加世界矢量地图 这是我的代码 在对其进行动画处理之前 我根据月平均温度的 3D 数组创建了一个栅格块 r lt brick ncols nb cols nrows nb
  • 为 Python 安装 PyObjC 时出现问题

    我试图在我的 Mac OS X El Capitan 上安装 PyObjC 下载大约 40 分钟后 我收到一个错误 然后它停止了 我尝试在终端中使用以下代码进行安装 pip install pyobjc 错误说 Command python
  • jQuery 获取元素相对于窗口的位置

    给定 HTML DOM ID 如何在 JavaScript JQuery 中获取元素相对于窗口的位置 这与相对于文档或偏移父级不同 因为该元素可能位于 iframe 或某些其他元素内部 我需要获取当前显示的元素矩形的屏幕位置 如位置和尺寸
  • 如何高效地将 npy 转换为 xarray / zarr

    我有一个 37 GB 的 npy 文件 我想将其转换为 Zarr 存储 以便可以包含坐标标签 理论上我有代码可以做到这一点 但我总是内存不足 我想在中间使用 Dask 来促进分块执行此操作 但我仍然耗尽内存 这些数据是人们股骨软骨的 厚度图
  • 查询依赖于 mongodb 中其他文档值的文档

    想象一下以下猫鼬模型 const UserSchema Schema id ObjectId more fields blockedIds type ObjectId ref User 获取与某个 id 的用户的 BlockedId 不匹配
  • Play!2.x 构建导致 sbt 失败并出现 NoClassDefFoundError

    我刚刚更新了 IDE 插件版本和库依赖项 现在无法构建我的项目 SBT 投掷java lang NoClassDefFoundError sbt TrackLevel执行时 我也跑不了 sbt clean因为它尝试加载项目并失败并出现相同的
  • 用动画隐藏 NSStackView 的视图项

    我在 macOS 上使用 swift 4 我想用动画隐藏堆栈视图项 我试过这个 class ViewController NSViewController IBOutlet weak var box NSBox IBOutlet weak
  • Prolog 编程 - 解决方案的途径

    我在大学学习序言并面临一些问题 我已经发现的只是解决问题的方法 然而 我更感兴趣的是思考的方式 即如何得到这样的解决方案 有人可以给我关于这个领域的建议吗 我将衷心感谢您的帮助 我举了一个我正在处理的例子 并且在 stackoverflow
  • 如何拒绝 Linq to SQL DataContext 中的所有更改?

    在 Linq to SQL 的 DataContext 上 我可以调用 SubmitChanges 来提交所有更改 我想要的是以某种方式拒绝数据上下文中的所有更改并回滚所有更改 最好不访问数据库 这可能吗 为什么不丢弃数据上下文并简单地用新
  • 在 Fabric js 中缩放时保持对象大小

    即使用户放大或缩小 是否有任何解决方案可以保持对象大小 我想实现像谷歌地图上的行为 因此 如果我有一个高度和宽度为 20 的对象 对象组 即使我放大它 默认情况下它仍然应该是 20 像素 现在我的行 为是 当用户放大或缩小图像时 图像会变大
  • 如何生成组合矩阵

    我有 5 个项目 每个项目的值为 1 或 1 我想生成一个由可能组合的行组成的矩阵 项目的顺序并不重要 组合的顺序也不重要 我知道我可以机械地完成此操作 但我认为必须有人知道生成此矩阵的快捷方式 如果这与其他问题类似 我深表歉意 但我找到的
  • 重现捕获迭代变量问题

    我正在重读 Nutshell 中的 c 5 0 中有关捕获迭代变量的部分 第 138 页 并且我尝试在 c 4 0 和 c 5 0 上重现以下代码 但直到现在才希望发现差异 using System class Test static vo