6

在最新版本的 Iesi.Collections 中缺少 Iesi.Collections.Generic.ISet。似乎有三种选择:

  1. 链接哈希集
  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,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

2 回答 2

4

好吧,从 Nuget 获取 Iesi.Collections 仅提供 v. 4。

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

我删除了 Iesi 参考并添加了 NHibernate,其中包括带有 ISet 的旧版本的 Iesi。它实际上并没有解决 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 回答