2013-04-26 54 views
0

我正在使用Iesi.Collections.Generic.ISet,我想知道如何确定我是否可以依靠这个。我正在使用.NET框架4我可以依靠ISet.Add方法把新成员放在最后位置吗?

+1

我不会依赖,除非它的行为在函数名称或文档中特别声明。否则,不能保证从一个版本到另一个版本的实现不会改变暴露代码中所做的假设。我认为在不改变公共接口的情况下更新实现是非常常见的。 – 2013-04-26 15:07:14

回答

5

编辑:我以前没有使用Iesi.Collections(但无法找到任何文档),但如果它的意图是类似System.Collections.Generic.ISet<T>,下面的答案仍然相关。我会非常感谢如果在一个设定的界面确实保证插入顺序。

“一组”的概念本质上是无序的。除非你是特别是使用“插入顺序”设置,你应该不是依靠它。

特别是:

  • HashSet<T>可能在难以预料,具体实现的方式更改订单。
  • SortedSet<T>确实保证订单 - 但它是元素顺序,而不是插入顺序。所以,如果你插入1,5,3,6,2成SortedSet<int>,然后遍历它,你会得到1,2,3,5,6
+1

请注意,他正在使用Iesi.Collections。 – alexn 2013-04-26 14:49:18

+0

@alexn:啊,没有注意到。以前从未见过耶西。 – 2013-04-26 14:49:46

+1

他们有一个实现,['LinkedHashSet '](https://github.com/nhibernate/iesi.collections/blob/master/src/Iesi.Collections/Generic/LinkedHashSet.cs),它保留了插入顺序。但是它只是在接口层面声明为实现框架的“接口”。 – 2013-04-26 14:52:51

相关问题