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 循环 - 顺序*稳定性*有保证吗? 的相关文章

  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 甜甜圈缓存 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