6

Iesi.Collections の最新バージョンでは、Iesi.Collections.Generic.ISet がありません。次の 3 つの選択肢があるようです。

  1. LinkedHashSet
  2. 読み取り専用セット
  3. 同期セット

Iesi.Collections.Generic.ReadOnlySet が ISet に最も近いようで、ドキュメントには次のように記載されています。

... although it's advertised as immutable it really isn't. 
Anyone with access to the wrapped set can still change the set. 

ReadOnlySet が ISet の最良の代替品であるように思われますか? 現在、実装はパブリック メソッドを介してセットにアイテムを追加しているため、最適なようです。代替手段 (IList、バッグ?) は、より多くのリソースを必要とするか、またはそれほど迅速/効率的ではないようです)? より良い代替手段はありますか?(リストには重複があってはなりません。これは手動で確認できます)

私は次のようなことをします:

public virtual ISet<MyClass> MyClass
{
    get { return this.myClass }
}

public virtual void AddItem(MyClass item)
{
    ... // Null checks and initialize ISet if null
    myClass.Add(item)
}

基本的には代替手段に要約されますが、速度などのマイナスの結果のない代替手段はありますか?

4

2 に答える 2

4

さて、Nuget から Iesi.Collections を取得すると、v. 4 のみが提供されます。

ここでの解決策はNHibernate 3.xで機能しましたが、この質問はおそらくNHibernate 4+に関連しています。NHibernate、Fluent NHibernate、および Iesi.Collection に関する問題。次に何を試しますか?

Iesi リファレンスを削除し、古いバージョンの Iesi with ISet を含む NHibernate を追加しました。それは実際には ISet と代替案を解決するものではありませんが、私の問題を解決するので、ISet を使い続けることができます。

おそらく、NHibernate 4.0 リリースに追加するか、その時点で変換する必要があるでしょう。

于 2013-06-10T07:48:26.807 に答える
2

Iesi.Collections v4 は .Net 4 用です。Iesi 3 の ISet の正しい置き換えは、.Net4.0 の .Net の System.Collections.Generic に含まれていた ISet を使用することです。

通常、.Net の HashSet クラスも使用します。

v4 で Iesi に残っているクラスは、めったに使用されない特殊なケースの実装です。

于 2016-07-12T11:44:34.623 に答える