为什么使用 foreach 时不执行此 LINQ 查询?

2023-11-21

在 LINQ 语句中创建新对象时,例如:

var list = new List<string>() { "a", "b", "c" };
var created = from i in list select new A();

A 类看起来像这样:

class A
{
    public string Label;
}

然后使用 foreach 循环修改 A 中的属性:

foreach (var c in created) {
    c.Label = "Set";
}

为什么访问对象中的对象时没有设置值IEnumerable然后。例如。以下断言失败:

Assert.AreEqual("Set", created.ElementAt(2).Label);

我想知道为什么会发生这种情况。我希望 foreach 语句执行查询,并触发对象的创建。 MSDN 文档指出:“查询的执行被推迟,直到在 foreach 或 For Each 循环中迭代查询变量为止”.

我已使用 .NET 4.5 和 Mono 3.2.0 重现了此行为。呼唤ToList on the IEnumerable在访问创建的对象之前使这个问题消失。


它的发生是因为created是一个查询,而不是一个结果。因此,每次枚举它时,您都在评估Select重新从头开始。

如果你想让这个工作,使created一个实际的列表,而不仅仅是一个IEnumerable代表一个查询。

例如,添加:

created = created.ToList();

You say:

我希望 foreach 语句执行查询,并触发对象的创建

这正是正在发生的事情。问题是每次迭代时都会创建对象created,不仅仅是第一次。自从ElementAt()方法迭代created,它只是创建新的As again.

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

为什么使用 foreach 时不执行此 LINQ 查询? 的相关文章

  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 有没有比这更快的方法来查找目录和所有子目录中的所有文件?

    我正在编写一个程序 需要在目录及其所有子目录中搜索具有特定扩展名的文件 这将在本地驱动器和网络驱动器上使用 因此性能是一个问题 这是我现在使用的递归方法 private void GetFileList string fileSearchP
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 字节到二进制字符串 C# - 显示所有 8 位数字

    我想在文本框中显示一个字节 现在我正在使用 Convert ToString MyVeryOwnByte 2 但是 当字节开头有 0 时 这些 0 就会被删除 例子 MyVeryOwnByte 00001110 Texbox shows g
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 如何避免选择项目时 winforms 树视图图标发生变化

    我正在一个小型 C Winforms 应用程序中尝试树视图 我已经以编程方式将 ImageList 分配给树视图 并且所有节点都很好地显示了它们的图标 but当我单击一个节点时 它的图标会发生变化 变为 ImageList 中的第一个图像
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • 标准 C 中的 sizeof 与 sizeof()? [复制]

    这个问题在这里已经有答案了 我看到一些直接使用 sizeof 的代码 想知道它是否是标准 C 令我惊讶的是 它运行得很好 这是一个例子 include
  • 为什么 C 函数不能返回数组类型?

    我是 C 语言新手 想知道 为什么 C 函数不能返回数组类型 我知道数组名是数组第一个值的地址 而数组是 C 中的二等公民 您自己已经回答了这个问题 数组是二等公民 C 按值返回 数组不能按值传递 因此不能返回它们 至于为什么数组不能按值传
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • OpenMP C 程序运行速度比顺序代码慢

    我是 OpenMP 的新手 正在尝试并行化 Jarvis 的算法 然而事实证明 与顺序代码相比 并行程序花费的时间要长 2 3 倍 难道问题本身就不能并行化吗 或者我并行化它的方式有问题 这是我针对该问题的 openMP 程序 其中有 2
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode

随机推荐

  • 套接字保持活动不工作

    我有一个客户端 connect 到服务器 当空闲时 它会在几个小时后超时 我添加了 setsockopt socket SOL SOCKET SO KEEPALIVE 1 秒 但这没有什么区别 关于为什么 keepalive 不起作用的任何
  • Azure 容器注册表 - 删除除 2 之外的所有映像

    我想删除 Azure 容器注册表中除最后两个之外的所有映像 我正在寻找一个脚本来执行此操作 但我发现只能删除 X 天之前的图像 这对于我的情况来说是不可能的 因为有些日子会创建很多图像 而其他日子则只有一张 有人有什么想法吗 将 skipL
  • 对象不支持属性或方法“对话框”

    参考Ajax控制工具包 我从 MVC 创建了一个 UI 对话框 布局 cshtml
  • 任务栏的 wxpython 图标

    我正在尝试在我的 wxpython 程序中设置一个图标 到目前为止 在阅读了许多页面和示例后 我能够在窗口中设置一个图标 这在使用 alt tab 时也可以使用 我正在 Windows 7 上工作 但任务栏上的图标是通常的Python默认图
  • 字符串和整数,隐式和显式

    有同事问过我这个问题 我脑子一片混乱 没有答案 为什么你可以这样做 string ham ham 4 But not string ham 4 如果您在进行字符串转换时存在隐式转换 操作连接 为什么不一样时指派它作为一个字符串 当然 不进行
  • 将.env环境变量上传到elastic beanstalk

    据我所知 将环境变量设置为 elastic beanstalk 的唯一方法是 AWS 在线控制台 The eb setenv命令 我有一个 env我的项目中包含一个包含超过 100 个变量的所有环境变量的文件 我正在寻找一种方法将它们同时推
  • 尊重 msbuild 调用的批处理文件的退出代码

    我有一个正在使用的批处理文件exit命令返回退出代码 在某些情况下 可以从命令行交互调用此批处理文件 或者在其他情况下 可以使用以下命令作为 MSBuild 项目的一部分运行Exec task 如果我使用exit errorlevel 在我
  • 在android中的activity之间传递字符串

    我已经搜索了很多地方 但还没有找到任何有效的解决方案 我真的需要帮助 我正在制作一个应用程序 需要将经度和纬度字符串从一个活动传递到另一个活动 我怎样才能做到这一点 在这里查看我的代码 LocationActivity java 需要将字符
  • 我将如何在 python 中播放闹钟声音?

    我有一个自己制作的时钟 我想把它做成闹钟 假设您使用的是 Windows import winsound winsound PlaySound alert wav 如果您使用的是 Linux 或者我相信是 Mac OS X 您可以使用 py
  • HTML 中使用 '\n' 换行

    有没有办法让HTML正确处理 n换行 或者我必须将它们替换为 br div class text abc def ghi div 这是为了在 HTML 中显示换行符和回车符 那么你不需要明确地这样做 您可以在 CSS 中通过设置空白属性 p
  • clojure 映射函数中的奇怪之处

    clojure 中的映射的第一个奇怪的事情是以下代码片段 apply map list 1 a 2 b 3 c 结果令我惊讶 1 2 3 a b c 任何人都可以解释它是如何工作的吗 apply f x y z 相当于 f x y z 所以
  • 在 PyInstaller 中找不到导入的模块

    我在 Windows 中工作 使用PyInstaller打包一个python文件 但发生了一些错误 Traceback most recent call last File
  • JDBC 使用 SELECT FOR UPDATE 锁定行,不起作用

    我遇到了 MySQL 的 SELECT FOR UPDATE 问题 这是我尝试运行的查询 SELECT FROM tableName WHERE HostName UnknownHost ORDER BY UpdateTimestamp a
  • 优化/简化路径

    假设我有一条包含 150 个节点 顶点的路径 如果这样的话 例如 具有 3 个顶点的直线将删除中间的一个 因为它不会添加到路径中 我该如何简化 另外我怎样才能避免破坏尖角 我怎样才能消除微小的变化并保留平滑的曲线 Thanks 对于每 3
  • 为什么我在使用 TStream 类时收到“抽象错误”?

    当我尝试运行以下简单的代码序列时 我得到了Abstract Error错误信息 type TForm1 class TForm Image1 TImage Button1 TButton procedure Button1Click Sen
  • Android:制作可滚动的自定义视图

    我已经滚动了自己的自定义视图 并且可以正常绘制到屏幕上 但我真正想做的是将屏幕的测量高度设置为 1000px 并让用户在 Y 轴上滚动 但我 我这样做时遇到问题 有人可以帮忙吗 这是一些代码 public class TestScreen
  • 如何在java中将.csv文件读入数组列表?

    我有一项大学作业 要求我从 csv 文件中获取数据 并以三种不同的方法读取 处理和打印它 这些说明要求我将数据读入数组列表中 我已经编写了一些代码来执行此操作 但我不确定我是否正确完成了操作 有人可以帮助我理解我应该如何将文件读入数组列表吗
  • 所有ajax请求完成后如何调用警报?

    我正在代码中使用 JQuery 发出一些请求 get 看起来像 get address1 function get address2 function get address3 function This code should be ru
  • 在 ASP.NET Core 6.0 和 7.0 上使用 Systemd

    如果你想在 Linux 上使用 systemd 托管你的 ASP 应用程序ASP NET 核心 5 你必须添加Microsoft Extensions Hosting Systemd具有此配置的 nuget 包 public class P
  • 为什么使用 foreach 时不执行此 LINQ 查询?

    在 LINQ 语句中创建新对象时 例如 var list new List