选择使用哪个C#集合的策略缺少什么?

时间:2010-08-08 20:13:58

标签: c# data-structures collections conceptual

这是我选择使用哪种C#集合类型的策略:

  • 如果集合中的项目数量是固定的,那么使用数组,例如:

    string [] directions = new string [] {“north”,“south”,“east”,“west”};

  • 否则始终使用List<T>

  • 除非您需要更专业的收藏品,例如Stack<T>, Queue<T>, or Dictionary<TKey, TValue>

  • 但不再使用ArrayList

根据您的经验,此策略缺少什么?

3 个答案:

答案 0 :(得分:7)

您的规则正常。

另外:

  • 始终在非基于(object的)基础上更新通用(或专业)集合。
  • 如果您想检查仅存在而不是键值映射(通过HashSet<T>表示),请使用Dictionary
  • 如果是字典,请考虑使用有序地图(SortedList<...>SortedDictionary<...>),如果排序似乎很重要。
  • 如果您在中间删除/插入操作,请使用链接列表。

当然也是最重要的一个:

  • 永远不要导出具体的集合类型:始终使用最常用的界面,在大多数情况下,IList<T>IEnumerable<T>

答案 1 :(得分:5)

我会说在大多数情况下,即使我知道集合中的项目数量,我也会使用List,只是为了它提供的实用程序函数的数量以及与LINQ的兼容性。

Hashmaps是一个重要的用例,因为您希望更快地访问集合中的项目。

答案 2 :(得分:1)

如果您计划在继承的类中覆盖添加/删除/清除方法,也可以使用Collection<T>,因为有虚拟方法。