2013-06-10 13 views
5

В последней версии Iesi.Collections отсутствует Iesi.Collections.Generic.ISet. Там, кажется, три альтернативы:Что такое подходящий NHibernate/Iesi.Collections.Generic.ISet <T> замена?

  1. LinkedHashSet
  2. ReadOnlySet
  3. SynchronizedSet

Iesi.Collections.Generic.ReadOnlySet, кажется, ближе всего к Исети, и в документации говорится:

... 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

Ну, получение Iesi.Collections из NuGet предлагает только ст. 4.

Решение здесь работали с NHibernate 3.x, но этот вопрос, вероятно, будет уместным с NHibernate 4+. Issuewith NHibernate, Fluent NHibernate and Iesi.Collection. What would you try next?

Я удалил ссылку Iesi и добавил NHibernate, которая включала старую версию Iesi с ISet. На самом деле это не решение ISet и альтернативы, но оно разрешает мою проблему, поэтому я могу просто продолжать использовать ISet.

Возможно, они добавят его в версию NHibernate 4.0, иначе она будет преобразована в это время.

+0

Iesi.Collection v3 также находится на NuGet. –

2

Iesi.Collections v4 для .Net 4. Правильная замена ISet Iesi 3 - использование ISet, включенного в .Net's System.Collections.Generic в .Net4.0.

Как правило, вы также используете класс .Net's HashSet.

Классы, оставшиеся в Iesi в v4, являются некоторыми реализациями конкретных случаев, которые редко используются.