什么是合适的NHibernate / iis . collections . generic . iset 更换

本文关键字:iset generic 更换 collections iis NHibernate 什么 | 更新日期: 2023-09-27 18:17:34

在最新版本的Iesi。Collections缺少iis .Collections. generic . iset。似乎有三种选择:

  1. LinkedHashSet
  2. ReadOnlySet
  3. 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是isset的最佳替代品?目前的实现是通过公共方法向集合添加项,所以它似乎是最合适的。替代方案(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)
}

基本上可以归结为选择,有没有没有负面影响的选择,比如速度等?

什么是合适的NHibernate / iis . collections . generic . iset <T>更换

好吧,我在找你。Nuget的Collections只提供v. 4。

这里的解决方案是使用NHibernate 3。但是这个问题可能与NHibernate 4+有关。问题与NHibernate,流利的NHibernate和Iesi.Collection。你接下来会尝试什么?

我删除了Iesi引用,并添加了NHibernate,其中包含一个带有ISet的旧版本的Iesi。它实际上并没有解决ISet与alternative的问题,但它确实解决了我的问题,所以我可以继续使用ISet。

也许他们会在NHibernate 4.0版本中添加它,否则那时就需要转换了

Collections v4是为。net 4准备的。正确的替换Iesi 3的ISet是使用。net 4.0中。net的System.Collections.Generic中包含的ISet。

你通常也会使用。net的HashSet类。

v4中Iesi中保留的类是一些很少使用的特殊情况实现。