选择正确的c#集合来使用

本文关键字:集合 选择 | 更新日期: 2023-09-27 18:16:32

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

现在我正试图绘制出我的类,并将对象设置为一个集合:

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

然而,当我给集合赋值时,我不确定是否使用HashSet或List来保存我的OrderLines集合。

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

做这件事的最好方法是什么?

选择正确的c#集合来使用

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

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

注意,为了在HashSet<OrderLine>中可用,你的OrderLine对象必须实现GetHashCodeEquals。严格地说,它们无论如何都应该这样做,但对于基于哈希的容器来说,这是必须的。

还要注意,将OrderLinesCollection的setter公开为public成员将使您处于这样一种境地:容器的选择不完全取决于您:任何使用您的类的人都可能根据他们的偏好将OrderLinesCollection设置为HashSetList。除非您将setter设置为private,否则您的类需要准备好处理它。

这取决于您的需求。如果顺序很重要,使用List,如果你经常需要检查一个项目是否包含在集合中,使用HashSetHashSet不尊重项目的顺序。

有关更多信息,请参阅以下文章:HashSet和List ?

你必须考虑你的用例

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

在我看来,列表用于添加/删除元素。

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