是否可以为 collection 提供订购保证?

Is it possible to provide an ordering guarantee for a collection?

我正在尝试创建一个方法(除了名称之外)表明某些 collection 的顺序将被保留。

我考虑过SortedList,但由于需要持有钥匙而放弃了。出于类似的原因,我也解雇了其他排序类型,并且 SortedSet 由于 Linq returning IEnumerable 而不是另一个 SortedSet 当您对其进行操作时。

我不介意是否需要新类型,或者我需要以特定方式编写方法。这里的目标是突出显示在操作 collection 时保留其输入顺序的方法。

我考虑过添加自定义属性并相信它会被正确使用,但理想情况下我希望找到更明确的语言。

-- 编辑

与其说是 collection 中元素的顺序(我可以使用 IEnumerable),不如说是对输入 collection 的一些操作。假设我 returning 数组中所有数字的根,而不是 returning (root, number)[],或者 (root, index)[] 我想 return root[] 并让用户清楚,returned 数组中元素的顺序与输入参数中元素的顺序相匹配。

听起来你想要 queue。第一个添加的对象将最先被删除,因此插入顺序得以保留。通常使用 Dequeue() 方法处理队列外的对象,但如果您不想从集合中删除,可以使用 Peek() 方法。

除此之外,您可能需要推出自己的实现。它可能只是 List<T> 的包装器,您可以在其中防止任何内容被 Inserted。

不,C# 或 .Net 中没有任何内容可以让您表达和执行 "this method does not change order of elements in a collection / while iterating through collection"。

传统期望是在迭代时保留集合中存储的元素的顺序,除非method/class明确命名以指示重新排序。

"no reordering"的例子:

  • for / 'foreach`
  • .Select.First.Take.SelectMany.Where
  • 索引未调用的集合 "SortedXxxxx" - List,数组。

"does reordering"

的例子
  • List.SortList.Reverse
  • .OrderBy.ThenBy
  • 类 不像 HashSetDictionaryOrderedDictionarySortedList
  • 那样 preserve/guarantee 排序