选择要使用的正确C#集合

时间:2014-08-04 15:29:53

标签: c# asp.net

我有一个包含子对象列表的对象。 这是一个非常简单的订单 - > OrderLines类型的关系。

现在我正在尝试绘制我的类,并将对象设置为ICollection:

public virtual ICollection<OrderLines> OrderLinesCollection { get; set; }

但是,当我为集合分配值时,我不确定是使用HashSet还是List来保存我的OrderLines集合。

this.OrderLinesCollection = new HashSet<OrderLines>();
this.OrderLinesCollection = new List<OrderLines>();

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

List<T>HashSet<T>之间的选择很简单:

  • 如果您需要维护特定的迭代顺序,请使用List<T>
  • 如果您不需要特定的迭代顺序,并且需要快速查找,请使用HashSet<T>

请注意,要在HashSet<OrderLine>中使用OrderLine个对象,必须实现GetHashCodeEquals。严格地说,他们应该这样做,但对于基于散列的容器,这是必须的。

另请注意,将OrderLinesCollection的setter作为公共成员公开会使您处于容器选择不完全取决于您的位置:使用您的类的任何人都可能将OrderLinesCollection设置为HashSetList,具体取决于他们的偏好。除非你制作了设定者private,否则你的班级需要准备好处理它。

答案 1 :(得分:1)

这取决于您的要求。如果订单很重要,请使用List,如果您经常需要检查集合中是否包含某个项目,请使用HashSetHashSet不尊重商品的订单。

有关详细信息,请参阅此帖子:What is the difference between HashSet<T> and List<T>?

答案 2 :(得分:0)

嗯,你必须考虑你的用例

来自msdn:HashSet类提供高性能的集合操作。集合是一个不包含重复元素的集合,其元素没有特定的顺序。

在我看来,当你必须添加/删除元素时会使用一个列表。

所以问问自己,你打算添加/删除元素吗?您的数据集是否具有重复元素?如果不是这种情况,你只需要一些东西来保存你的数据,我会使用一个数组