我正在尝试创建一种方法(名称上除外),该方法表明将保留某些集合的顺序。
我考虑过SortedList
,但由于要求持有钥匙而将其驳回。由于类似的原因,我还取消了其他Sorted类型,并且由于SortedSet
在您对其进行操作时返回了Linq
而不是另一个IEnumerable
,因此撤消了SortedSet
。
我不介意是否需要新类型,或者我需要以特定方式编写方法。这里的目标是突出显示在操作集合时保留其输入顺序的方法。
我曾考虑过添加一个自定义属性,只是相信它会被正确使用,但是理想情况下,我想用更明确的语言找到一些东西。
-编辑
不是集合中元素的顺序(我可以使用IEnumerable
),而是对输入集合的一些操作。假设我要返回数组中所有数字的根,而不是返回(root, number)[]
或(root, index)[]
,我想返回root[]
并向用户清楚返回数组中的元素与输入参数中的元素顺序匹配。
答案 0 :(得分:1)
不,在C#或.Net中没有什么可以让您表达和执行的:“此方法在遍历集合时不会更改集合中元素的顺序。”
常规期望是在迭代过程中保留的集合中存储的元素的顺序,除非显式命名的方法/类指示重新排序。
“不重新排序”的示例:
for
/'foreach` .Select
,.First
,.Take
,.SelectMany
,.Where
List
,数组。“重新排序”的示例
List.Sort
,List.Reverse
.OrderBy
,.ThenBy
HashSet
,Dictionary
,OrderedDictionary
,SortedList
答案 1 :(得分:0)
听起来像您想要queue。添加的第一个对象将是第一个被删除的对象,因此保留了插入顺序。通常,对象是使用Dequeue()
方法从队列中处理的,但是如果您不想从集合中删除对象,则可以使用Peek()
方法。
除此之外,您可能需要滚动自己的实现。它可能只是List<T>
的包装,在这里您可以防止Insert
修改任何内容。