2013-04-26 37 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

相關問題