|
|
1
77
例如,考虑下面的方法签名:
此方法要求向其传递列表的具体实现。但它只是在有条不紊地做事。它实际上不需要随机访问,也不需要任何其他的东西
现在,我们使用最通用(最不特定)的接口来支持我们需要的操作。这是面向对象设计的一个基本方面。我们减少了耦合,只需要我们需要的东西,而不需要其他很多东西。我们还创造了一个更加
灵活的
所以不是这样
|
|
|
2
44
枚举有几个非常好的属性,在将它们转换为列表时会丢失这些属性。即:
首先我来看看延迟执行。突击测验:以下代码将在输入文件中的行上迭代多少次?
即使在代码运行之后,它仍然只在行上循环一次。将其与您需要迭代此代码中的行的次数进行比较:
即使你忽略了
为了演示可组合性,我将在最后一个特性中添加一个特性—无界系列。考虑一下:
可组合性 IEnumerable的属性来构建安全地给出前50个值或小于给定数字的每个值的内容:
最后,IEnumerable更灵活。除非您绝对需要附加到列表或按索引访问项的功能,否则编写函数时最好接受IEnumerables作为参数,而不是列表。为什么?因为如果需要,您仍然可以将列表传递给函数-列表 是 数不清的。就这一点而言,数组和许多其他集合类型也是如此。因此,通过在这里使用IEnumerable,您可以使用完全相同的函数并使其更强大,因为它可以处理更多不同类型的数据。 |
|
3
5
这个
此接口可以在许多类型上实现(
|
|
|
4
3
这不是效率的问题(尽管这可能是真的),而是灵活性的问题。
Q
:如何获取由GetDigits生成的一组数字并获取总和以将它们相加?
这意味着我可以做到:-
没有列表加载到内存中,我只需要存储当前数字和累加器变量的总和。 |
|
|
5
1
|
|
|
6
1
建议让方法返回的一个原因
|
|
|
7
0
在.NET 3.5中,使用IEnumerable可以编写延迟执行的方法,例如:
这允许您在不创建新列表的情况下合并这两个列表
|