gpt4 book ai didi

c# - 有序枚举

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:50 28 4
gpt4 key购买 nike

.NET 标准库中提供的几个集合旨在保持内部项目的顺序 - 例如 ListLinkedListQueue堆栈。另一方面,其他人以其他方式排列项目,例如 DictionaryHashSet

我的问题是:如果容器按特定顺序(按顺序)保存元素,是否保证,通过该容器的枚举最初将按该顺序完成?

例如,我想以相反的顺序枚举列表中的项目。简单的方法是这样写:

foreach (var item in list.Reverse<type>()) { ... }

但这只有在初始枚举器按照集合中的存储顺序遍历集合项时才有效。如果没有这样的保证,我可能应该以其他方式编写代码:

for (int i = list.Count - 1; i >= 0; i--) { ... }

实际上更短,但可读性肯定更差。

注意:我知道,该列表实际上按顺序枚举项目,直觉告诉我们,所有已排序的容器都会这样做。但如果框架不保证,.NET 5.0 可能会以(例如)更有效的方式引入枚举,但会破坏项目的顺序。


MSDN docs 建议,通过使用诸如“在集合中的第一个元素之前”和“移动到集合中的下一个元素”之类的术语来保持顺序。但这足以说明订单是保证的吗?

最佳答案

我认为没有人(即使是 Microsoft)可以保证 future 软件的行为方式。但是,您链接到的 MSDN 页面说,“例如,ArrayList 的枚举器保留元素在集合中输入的顺序。” List<T>是一个有序列表,我会说返回乱序项目的枚举器已损坏。我认为你可以安全地使用 Reverse<T> .请记住,对列表的任何更改都会使您的枚举器失效。确保您的列表在枚举时没有被任何其他线程更改。

关于c# - 有序枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24731790/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com