2013-06-10 26 views
5

Trong phiên bản mới nhất của Iesi.Collections bị thiếu Iesi.Collections.Generic.ISet. Dường như có ba lựa chọn:NHibernate/Iesi.Collections.Generic.ISet <T> thay thế phù hợp là gì?

  1. LinkedHashSet
  2. ReadOnlySet
  3. SynchronizedSet

Iesi.Collections.Generic.ReadOnlySet có vẻ là gần nhất với ISET, và các trạng thái tài liệu:

... although it's advertised as immutable it really isn't. 
Anyone with access to the wrapped set can still change the set. 

Có vẻ như ReadOnlySet là đại diện tốt nhất vị trí cho ISet? Hiện tại, việc triển khai sẽ thêm các mục vào một tập hợp thông qua các phương thức công cộng để nó có vẻ phù hợp nhất. Các lựa chọn thay thế (IList, túi?) Dường như đòi hỏi nhiều tài nguyên hơn hoặc không nhanh chóng/hiệu quả)? Có một lựa chọn tốt hơn? (Danh sách này không nên có bản sao, mà có thể được xác nhận bằng tay)

tôi sẽ làm những thứ như:

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) 
} 

Về cơ bản nó nắm để lựa chọn thay thế, đang có giải pháp thay thế mà không cần hậu quả tiêu cực như trong tốc độ, vv?

Trả lời

4

Vâng, nhận Iesi.Collections từ NuGet chỉ cung cấp v. 4.

Giải pháp ở đây làm việc với NHibernate 3.x, nhưng câu hỏi này có lẽ sẽ phù hợp với NHibernate 4+. Issuewith NHibernate, Fluent NHibernate and Iesi.Collection. What would you try next?

Tôi đã xóa tham chiếu Iesi và thêm NHibernate bao gồm phiên bản cũ của Iesi với ISet. Nó không thực sự giải quyết ISet so với thay thế, nhưng nó giải quyết vấn đề của tôi vì vậy tôi chỉ có thể tiếp tục sử dụng ISet.

Có lẽ họ sẽ thêm nó là bản phát hành NHibernate 4.0, nếu không nó sẽ cần phải được chuyển đổi tại thời điểm đó.

+0

Iesi.Collection v3 cũng có trên NuGet. –

2

Iesi.Collections v4 là dành cho .Net 4. Thay thế chính xác cho Iesi 3's ISet là sử dụng ISet được bao gồm trong System.Collections.Generic của .Net trong .Net4.0.

Bạn cũng thường sử dụng lớp HashSet của Net.

Các lớp còn lại trong Iesi trong v4 là một số trường hợp triển khai đặc biệt, hiếm khi được sử dụng.