You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中GetEnumerator()返回副本还是遍历原数据源?修改会影响原队列吗?

ConcurrentQueue.GetEnumerator 相关问题解答

1. GetEnumerator() 返回的是队列副本还是原数据源?

ConcurrentQueue<T> 的 GetEnumerator() 方法返回的是调用该方法时队列的快照(副本),并非直接遍历原数据源。这意味着:

  • 遍历过程中,原队列的新增、删除操作不会同步到当前枚举器的遍历内容中;
  • 枚举器的遍历操作不会因原队列的并发修改抛出 InvalidOperationException。

2. 遍历过程中修改元素会同步修改原队列吗?

不会,主要有两个原因:

  • 枚举器遍历的是快照副本,即便能修改元素,也只会修改副本内的内容,与原队列无关联;
  • 你的代码中元素类型是 string,它是.NET中的不可变类型,list.Current as string = "aaa" 这种写法本身无法编译通过——不可变类型的实例一旦创建就无法修改,你只能重新给变量赋值,而非修改原有字符串对象的内容。

额外说明:若想修改原队列中的元素,不能通过枚举器直接操作。ConcurrentQueue 没有提供枚举器修改元素的能力,你需要先将元素出队,修改后再入队,同时要注意处理并发场景下的线程安全问题。


内容的提问来源于stack exchange,提问作者R.P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:50:44