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

.NET中用List作队列,执行Linq操作后能否保持元素添加顺序?

Linq操作后是否保留List的原始顺序?

是的,你执行这段Linq操作后得到的元素会保持最初添加到List中的顺序,原因如下:

  • Where:严格按照源序列(也就是你的_queue)的顺序返回符合过滤条件的元素,不会打乱原有顺序。
  • DistinctBy:.NET 6及之后官方提供的DistinctBy是稳定的——它会保留每个Id第一次出现的元素,且这些保留元素的相对顺序和它们在源序列中的出现顺序完全一致,只会移除后续重复Id的元素。
  • Take:按源序列的顺序提取指定数量的前N个元素,自然不会改变顺序。

结合你的代码来看:
你的_queue是List,本身是有序集合。经过Where过滤掉在_snLockList里的元素后,剩下的元素顺序不变;DistinctBy只剔除后续重复Id的元素,保留的元素依然遵循原始添加顺序;最后Take取前freeTasks个元素,最终的toConsume列表顺序和这些元素最初加入_queue的顺序一致。

注意:如果是.NET 6之前的版本,官方没有DistinctBy,如果是自行实现的版本可能存在不稳定的情况,但当前官方实现是稳定的。

内容的提问来源于stack exchange,提问作者Patola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:19:54