正确的收藏做法

时间:2015-05-29 12:44:17

标签: c# .net arrays collections

我已经谷歌搜索了一段时间知道,无法找到一个可理解的定义,在哪里使用以下集合,在哪种情况下,它们更适合:

  • 列表
  • 列表项
  • 的IEnumerable
  • 队列
  • 阵列
  • 的ArrayList
  • 索引属性

我正在使用C#并向您介绍我的教育背景:在我的极限我可以创建一个图片管理器,搜索包含图片路径和描述等的CSV文件。

我现在正在研究MCSD证书,并希望在这里找到差异的坚实基础。

TIA

马丁

2 个答案:

答案 0 :(得分:1)

简短回答:

  • List是一种非常通用的集合。如果没有特殊要求,可以使用列表。
  • 列表项不是列表。它是列表中的一个项目。
  • IEnumerable不是Collection类型。它是大多数集合实现的接口。它基本上定义了迭代集合的能力。
  • 队列是一种特殊的收藏品。你在后面添加东西并从前面取出。适合工作清单。先进先出。
  • 数组是您必须提前知道项目数的集合。它们可以快速访问某个索引位置。
  • ArrayList的。我从不使用它们。清单。
  • 索引属性是能够编写如下代码的能力。因此,访问集合中的某个位置。 var item = list[4];

但正如一些评论所提到的那样:它的篇幅很长很短。

答案 1 :(得分:0)

首先是相互构建的接口:

  • IEnumerable :提供枚举项目的仅限转发方式。无法添加或删除项目。无法知道项目的数量。无法通过随机索引访问项目。物品没有保证订单。
  • ICollection : IEnumerable :增加了解项目数量的功能。添加添加/删除/清除列表的功能。无法通过随机索引访问项目。物品没有保证订单。
  • IList : ICollection :添加通过随机索引访问项目的功能。物品有订单

这是您需要的概念起点:

  

可数<收集<列表

| Use             | IEnumerable | ICollection | IList |
|-----------------|-------------|-------------|-------|
| Enumerate       |         Yes |         Yes |   Yes |
| Count           |             |         Yes |   Yes |
| Add/Remove      |             |         Yes |   Yes |
| Clear           |             |         Yes |   Yes |
| Has order       |             |             |   Yes |
| Access by index |             |             |   Yes |

您的变量通常应使用最适合您需要的接口

如果您只需要一组员工,并且您不需要更改列表,也不需要关心该订单:

IEnumerable<Employee> employees = GetEmployees();

如果您需要添加/删除商品的功能,但您仍然不关心订单:

ICollection<Awards> awards = GetStackoverflowAwards("Heffernan");

如果您关心物品出现的顺序:

IList<Answers> topAnswers = GetTopAnswers("Heffernan", 500);

该接口,其余为实现

然后有实现这些接口的类。

  • 列表
  • 阵列
  • 词典

这些是您必须实例化以获取接口的具体实现。

我将不再在这里打字,因为意气风发的grumps很快就会关闭这个问题。