2013-06-10 4 views
5

Iesi.Collectionsの最新バージョンにIesi.Collections.Generic.ISetがありません。 3つの選択肢があるように思える:LinkedHashSetの 適切なNHibernate/Iesi.Collections.Generic.ISet <T>は何ですか?

  • ReadOnlySet
  • SynchronizedSet

    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、bag?)は、より多くのリソースを必要とするか、または速く効率的ではないようですか?よりよい選択肢がありますか? (リストを手動で確認することができ、重複を持つべきではない)

    私はのようなものをやる:

    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

    まあ、NugetからIesi.Collectionsを取得するだけVを提供しています。4.

    ここソリューションはNHibernateの3.xので働いていたが、この質問はおそらく、NHibernateは4+との関連になります。 Issuewith NHibernate, Fluent NHibernate and Iesi.Collection. What would you try next?

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

    おそらく、NHibernate 4.0リリースに追加されます。そうしないと、その時点で変換する必要があります。

    +0

    Iesi.Collection v3もNuGetにあります。 –

    2

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

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

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

    関連する問題