C# 我可以依靠ISet.Add方法将新成员置于最后位置吗?

C# 我可以依靠ISet.Add方法将新成员置于最后位置吗?,c#,.net,C#,.net,我正在使用Iesi.Collections.Generic.ISet,我想知道如何确定我是否可以依赖它。我使用的是.NET framework 4编辑:我以前没有使用过Iesi.Collections(并且无法发现任何文档),但是如果它是类似的,下面的答案仍然相关。我会非常惊讶,如果在一个集接口,它确实保证插入顺序 “集合”的概念本质上是无序的。除非您特别使用“插入顺序”集合,否则不应依赖它 特别是: 很可能会以难以预测、具体实施的方式改变顺序 不保证顺序,但它是元素顺序,而不是插入顺序。因此

我正在使用Iesi.Collections.Generic.ISet,我想知道如何确定我是否可以依赖它。我使用的是.NET framework 4

编辑:我以前没有使用过
Iesi.Collections
(并且无法发现任何文档),但是如果它是类似的,下面的答案仍然相关。我会非常惊讶,如果在一个集接口,它确实保证插入顺序

“集合”的概念本质上是无序的。除非您特别使用“插入顺序”集合,否则不应依赖它

特别是:

  • 很可能会以难以预测、具体实施的方式改变顺序
  • 不保证顺序,但它是元素顺序,而不是插入顺序。因此,如果将1,5,3,6,2插入到
    SortedSet
    中,然后对其进行迭代,将得到1,2,3,5,6

编辑:我以前没有使用过Iesi.Collections(也看不到任何文档),但如果是类似的,下面的答案仍然相关。我会非常惊讶,如果在一个集接口,它确实保证插入顺序

“集合”的概念本质上是无序的。除非您特别使用“插入顺序”集合,否则不应依赖它

特别是:

  • 很可能会以难以预测、具体实施的方式改变顺序
  • 不保证顺序,但它是元素顺序,而不是插入顺序。因此,如果将1,5,3,6,2插入到
    SortedSet
    中,然后对其进行迭代,将得到1,2,3,5,6

注意,他正在使用Iesi.Collections。@alexn:啊,我没注意到。以前从未见过Iesi。它们有一个保持插入顺序的实现。但它只是在接口级别声明为实现框架的
ISet
接口。@JeanHominal:对,一个特定的实现可以做到这一点。但这和它作为接口契约本身的一部分是不一样的,这会很奇怪。请注意,他使用的是Iesi.Collections。@alexn:啊,我没注意到。以前从未见过Iesi。它们有一个保持插入顺序的实现。但它只是在接口级别声明为实现框架的
ISet
接口。@JeanHominal:对,一个特定的实现可以做到这一点。但这与它作为接口契约本身的一部分是不一样的,这将是非常奇怪的。除非在函数名或文档中明确说明,否则我不会依赖该行为。否则,无法保证从一个版本到另一个版本的实现不会改变,从而暴露代码中的假设。我认为框架在不改变公共接口的情况下更新实现是很常见的。除非函数名或文档中明确说明,否则我不会依赖于这种行为。否则,无法保证从一个版本到另一个版本的实现不会改变,从而暴露代码中的假设。我认为框架在不改变公共接口的情况下更新实现是非常常见的。