收集的正确做法
本文关键字: | 更新日期: 2023-09-27 17:51:04
我已经在谷歌上搜索了一段时间了,但无法找到一个可以理解的定义,即在哪里使用以下集合以及在哪种情况下它们更合适:
- 列表项
- IEnumerable 队列
- 数组
- ArrayLists <
- 索引属性/gh>
我正在使用c#,并给你一点关于我的教育背景:在我的限制下,我可以创建一个图片管理器,搜索包含图片路径和描述等的CSV文件。
我现在正在考虑做MCSD证书,并希望在这里的差异打下坚实的基础。
TIA
马丁简短回答:
- List是一种非常通用的集合。如果您没有特殊要求,您可以使用列表。
- 列表项不是列表。这是列表中的一项。
- IEnumerable list不是Collection类型。这是一个大多数集合都实现的接口。它基本上定义了迭代集合的能力。
- Queue是一种特殊的集合。你在后面加东西,把前面的拿掉。很适合工作列表。先进先出。
- 数组是集合,您必须事先知道项目的数量。它们提供对特定索引位置的快速访问。
- ArrayList。我从不使用它们。类型列表。
- 索引属性是编写如下代码的能力。所以访问集合中的某个位置。
var item = list[4];
但正如一些评论所提到的:这是一个很长的故事,非常非常短。
首先是相互构建的接口:
-
IEnumerable
:提供仅向前的枚举项方式。无法添加或删除项目。没办法知道物品的数量。无法通过随机索引访问项目。商品没有保证订单。 -
ICollection : IEnumerable
:添加物品计数功能。增加添加/删除/清除列表的能力。无法通过随机索引访问项目。商品没有保证订单。 -
IList : ICollection
:增加随机索引访问项的能力。物品有订单
这是你需要的概念起点:
可列举的& lt;收集& lt;
列表
| 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将很快结束这个问题。