选择正确的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>();
做这件事的最好方法是什么?
List<T>
和HashSet<T>
之间的选择很简单:
- 如果你需要保持一个特定的迭代顺序,使用
List<T>
- 如果您不需要特定的迭代顺序,并且需要快速查找,请使用
HashSet<T>
注意,为了在HashSet<OrderLine>
中可用,你的OrderLine
对象必须实现GetHashCode
和Equals
。严格地说,它们无论如何都应该这样做,但对于基于哈希的容器来说,这是必须的。
还要注意,将OrderLinesCollection
的setter公开为public成员将使您处于这样一种境地:容器的选择不完全取决于您:任何使用您的类的人都可能根据他们的偏好将OrderLinesCollection
设置为HashSet
或List
。除非您将setter设置为private
,否则您的类需要准备好处理它。
这取决于您的需求。如果顺序很重要,使用List
,如果你经常需要检查一个项目是否包含在集合中,使用HashSet
。HashSet
不尊重项目的顺序。
有关更多信息,请参阅以下文章:HashSet
你必须考虑你的用例
来自msdn: HashSet类提供高性能的集合操作。set是不包含重复元素的集合,其元素没有特定的顺序。
在我看来,列表用于添加/删除元素。
所以问问你自己,你要添加/删除元素吗?你的数据集会有重复的元素吗?如果两者都不是情况,你只是需要一些东西来保存你的数据,我会使用数组