Что является подходящей заменой NHibernate / Iesi.Collections.Generic.ISet<T>?
В последней версии Iesi.Collections отсутствует Iesi.Collections.Generic.ISet. Кажется, есть три варианта:
- LinkedHashSet
- 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)
}
В основном это сводится к альтернативам, есть ли альтернативы без негативных последствий, таких как скорость и т. Д.?
2 ответа
Что ж, получение Iesi.Collections от Nuget предлагает только v. 4.
Решение здесь работало с NHibernate 3.x, но этот вопрос, вероятно, будет актуален с NHibernate 4+. Выпуск с NHibernate, свободно NHibernate и Iesi.Collection. Что бы вы попробовали дальше?
Я удалил ссылку на Iesi и добавил NHibernate, который включал старую версию Iesi с ISet. На самом деле это не решает ISet против альтернативы, но решает мою проблему, поэтому я могу просто продолжать использовать ISet.
Возможно, они добавят его в релиз NHibernate 4.0, иначе его нужно будет конвертировать в это время.
Iesi.Collections v4 предназначен для.Net 4. Правильная замена ISet в Iesi 3 - это использование ISet, включенного в.Net System.Collections.Generic в.Net4.0.
Обычно вы также используете класс.Net HashSet.
Классы, оставшиеся в Iesi в v4, представляют собой особые реализации, редко используемые.