我有一个包含子对象列表的对象。 这是一个非常简单的订单 - > OrderLines类型的关系。
现在我正在尝试绘制我的类,并将对象设置为ICollection:
public virtual ICollection<OrderLines> OrderLinesCollection { get; set; }
但是,当我为集合分配值时,我不确定是使用HashSet还是List来保存我的OrderLines集合。
this.OrderLinesCollection = new HashSet<OrderLines>();
this.OrderLinesCollection = new List<OrderLines>();
这样做的最佳方式是什么?
答案 0 :(得分:2)
List<T>
和HashSet<T>
之间的选择很简单:
List<T>
HashSet<T>
请注意,要在HashSet<OrderLine>
中使用OrderLine
个对象,必须实现GetHashCode
和Equals
。严格地说,他们应该这样做,但对于基于散列的容器,这是必须的。
另请注意,将OrderLinesCollection
的setter作为公共成员公开会使您处于容器选择不完全取决于您的位置:使用您的类的任何人都可能将OrderLinesCollection
设置为HashSet
或List
,具体取决于他们的偏好。除非你制作了设定者private
,否则你的班级需要准备好处理它。
答案 1 :(得分:1)
这取决于您的要求。如果订单很重要,请使用List
,如果您经常需要检查集合中是否包含某个项目,请使用HashSet
。
HashSet
不尊重商品的订单。
有关详细信息,请参阅此帖子:What is the difference between HashSet<T> and List<T>?
答案 2 :(得分:0)
嗯,你必须考虑你的用例
来自msdn:HashSet类提供高性能的集合操作。集合是一个不包含重复元素的集合,其元素没有特定的顺序。
在我看来,当你必须添加/删除元素时会使用一个列表。
所以问问自己,你打算添加/删除元素吗?您的数据集是否具有重复元素?如果不是这种情况,你只需要一些东西来保存你的数据,我会使用一个数组