C# foreach 循环 - 顺序*稳定性*有保证吗?

2024-02-06

假设我有一个给定的集合。在不以任何方式更改集合的情况下,我使用 foreach 循环遍历其内容两次。除非有宇宙射线之类的东西,是否绝对保证两个循环中的顺序一致?

或者,给定一个HashSet<string>对于多个元素,什么会导致以下注释行的输出不相等:

{
    var mySet = new HashSet<string>();
    // Some code which populates the HashSet<string>

    // Output1
    printContents(mySet);

    // Output2
    printContents(mySet);
}

public void printContents(HashSet<string> set) {
    foreach(var element in set) {
         Console.WriteLine(element);
    }
}

如果我能得到一个一般性的答案来解释导致实现不满足上述标准的原因,那将会很有帮助。但具体来说,我感兴趣的是Dictionary, List和数组。


数组枚举保证顺序。

List and List<T>预计将提供稳定的顺序(因为预计它们将实现顺序索引元素)。

Dictionary、HashSet 都明确不保证顺序。连续两次调用迭代项目不太可能以不同的顺序返回项目,但没有保证或期望。人们不应该期待任何特定的顺序。

Dictionary/HashSet 的排序版本按排序顺序返回项目。

其他 IEnumerable 对象可以自由地做任何他们想做的事情。通常,人们以符合用户期望的方式实现迭代器。 IE。如果提供显式顺序,则具有隐式顺序的事物的枚举应该是稳定的 - 预期是稳定的。对未指定顺序的数据库的查询应该以半随机顺序返回项目。

检查此问题的链接:C# 中的 foreach 循环是否保证计算顺序? https://stackoverflow.com/questions/3097769/does-the-foreach-loop-in-c-sharp-guarantee-an-order-of-evaluation?rq=1

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

C# foreach 循环 - 顺序*稳定性*有保证吗? 的相关文章

随机推荐

  • 甜甜圈缓存 ASP.NET MVC2

    是否有可能使用 MVC2 进行甜甜圈缓存 即使进行了大量研究 我也无法找到可行的解决方案 甜甜圈缓存不适用于 ASP NET MVC 2 请参阅http forums asp net t 1521502 aspx http forums a
  • MongoDB-转义点 '.'在地图键中]

    产品的地图键代码包含点 但未配置替换 首先确保地图键不包含点或配置适当的替换 org springframework data mapping model MappingException 地图键 foo bar key 包含点 但未配置替
  • 无法运行 aapt dump badging - Google Play 商店

    我无法将我的应用程序上传到 Play 商店 当我上传 file apk 时 收到此错误 无法运行 aapt dump badging W ResourceType 17873 错误的 XML 块 标头大小 28024 或总大小 170224
  • 使用 cocoa touch 测量 iPhone 上下载速度的最佳方法

    我正在制作一个应用程序 我想提供的功能之一是测量连接的下载速度 为了得到这个 我使用 NSURLConnection 开始下载一个大文件 并在一段时间后取消下载并进行计算 下载的数据 经过的时间 虽然其他应用程序 例如 speedtest
  • 如何在没有 QQuickView 的情况下截取 QML 应用程序的屏幕截图

    我想抓取我的 QML 应用程序的屏幕 但我的根 QML 对象是ApplicationWindow 所以我不能使用QQuickView来展示它 相反我必须使用QQmlApplicationEngine 我知道如何截图QQuickView QQ
  • 核心数据瞬态计算属性

    我有一个包含lastName 和firstName 属性的实体 由于超出此问题范围的原因 我想要一个 fullName 属性 该属性作为firstName space lastName 的串联来计算 因为这纯粹是一个计算值 不需要重做 撤消
  • 未找到生成命令

    我尝试运行 sh 文件时出错 line 2 spawn command not found no such file or directory bash sh line 3 expect command not found bash sh
  • 获取缓冲区中的当前行作为 elisp 中的字符串

    如何在 elisp 中将缓冲区的当前行收集为字符串值 我可以做这个 let p1 p2 myLine setq p1 line beginning position setq p2 line end position setq myLine
  • SVG 字母间距也适用于 Mozilla Firefox

    还有其他选择吗字母间距按照SVG text 这段代码是在 Chrome 上工作 but not on Firefox https developer mozilla org de docs Web CSS letter spacing ht
  • R 中任意点的精确核密度值[重复]

    这个问题在这里已经有答案了 我想知道是否有R 基本方法可以在任何所需的点获得精确的核密度 例如 如何获得以下 3 个点的准确核密度X 轴 2 0 2在像下面这样的情节中 set seed 2937107 plot density rnorm
  • 如何使用第三方 CAS 身份验证从独立的 React 前端和 django 后端(相同域,不同端口)对用户进行身份验证?

    我正在设置 django 后端Django REST framework用于提供API 通过第三方CAS服务器实现身份验证 目前我的后端认证已经成功实现 使用django cas ngpackage 这意味着我可以为不同的用户组实现不同的权
  • CSS 滤镜灰度:我想要黑色

    我正在使用以下 css 将彩色图像转换为灰度图像 img desaturate filter grayscale 100 webkit filter grayscale 100 moz filter grayscale 100 ms fil
  • 基于 Web 的 API 可以告诉我某个号码是固定电话还是手机? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我的应用程序向人们发送短信 但输入的手机号码有时是固定电话 这是用户错误或用户并不真正知道他们的联系号码
  • 用javascript替换图像

    我想用javascript替换gif文件 我找到了下面的方法 有什么办法可以将 javascript 标签放在 img 标签之前吗 img class myImg src compman gif width 107 height 98 在文
  • 在 Windows 7 中使用 .NET Windows 服务显示消息框

    我们有一个 Windows 服务 用于在用户在 Windows XP 上扫描访问卡后显示确认消息框 但一旦我们迁移到 Windows 7 该弹出功能就不再起作用 任何人都可以指导我完成或给我任何关于如何尽快修复此功能的想法吗 正如您所发现的
  • 循环浏览文件夹中的文件并复制/粘贴到主文件

    我的一个文件夹中有 3 个文件和一个主模板 我想要 循环浏览这些文件 然后将内容复制到主文件 每个整个文件都将粘贴到主文件中的新工作表中 新工作表的名称将与文件的名称相同 下面的代码不起作用并且缺少功能 2 和 3 Sub AllFiles
  • 如何让 Maven 使用我的 TestNG XML 文件?

    首先 我已经阅读了这里关于如何执行此操作的每一篇文章 我正在遵循信中的所有说明 包括 Maven 本身的说明 我已使用 TestNG 将 Eclipse Selenium 项目转换为 Maven 项目 我无法让 Maven 从 Test X
  • 如何配置 JAXB / Moxy 以针对 XML 中潜在丢失的数据抛出错误

    如果提供的数据无法解组为预期的数据类型 是否可以将 JAXB 配置为引发异常 我们有一个 Integer XmlElement 有时会得到像 1 1 这样的值作为输入 Jaxb Moxy 只是默默地忽略这些值并将它们设置为 null 我们通
  • ReactJS 函数没有获取最新状态

    我正在尝试 ReactJS 但在将其合并到我的表单中时遇到了困难 我正在 ReactJS 中构建一个自动建议表单 在我的onChangeQuery 我正在设置状态 然后调用 AJAX 函数以从服务器端代码中获取建议 但是 我注意到loadG
  • C# foreach 循环 - 顺序*稳定性*有保证吗?

    假设我有一个给定的集合 在不以任何方式更改集合的情况下 我使用 foreach 循环遍历其内容两次 除非有宇宙射线之类的东西 是否绝对保证两个循环中的顺序一致 或者 给定一个HashSet