c#中Iterator和Array之间的区别

时间:2009-08-17 11:04:21

标签: c# arrays iterator

重复 What is the purpose/advantage of using yield return iterators in C#?

好吧,这不是这个。你能否详细解释一下这两者有何不同?

喜欢返回一个数组(比方说字符串) 或使用iterator(也是字符串)进行yield return

我觉得它们是一样的。 请详细说明。

4 个答案:

答案 0 :(得分:9)

数组是指向固定大小的随机访问数据块的指针。调用者可以更新值,以任何顺序访问值等。

迭代器是值的序列的关键(可以是无限长)。调用者只能按源提供的顺序访问它们,并且无法更新它们。

访问序列中的每个值有更多的开销,但它具有不需要同时处理所有数据的优点,因此对于中长序列可以更有效。

答案 1 :(得分:2)

如果返回无法更改内部数据结构的迭代器,则可能不需要复制它。

另一方面,一个常见的错误是返回你在内部使用的东西,这将允许外部代码修改你的内部数据结构,这通常是一个很大的禁忌。

例如,请考虑以下事项:

Int32[] values = otherObj.GetValues();
values[0] = 10;

如果GetValues方法只返回一个内部数组,那么第二行现在将改变该数组的第一个值。

答案 2 :(得分:2)

数组是数据存储。迭代器只是生成序列的其他数据存储或方法的迭代器。

因此,如果方法返回一个数组,您可以修改它及其元素。你不能通过迭代器来做到这一点。此外,阵列的大小有限。迭代器可以是无限的。

答案 3 :(得分:1)

迭代器无法修改,但数组可以。您可以使用[index]表示法引用数组中的特定项,但是使用迭代器,您只能按顺序从第一个元素开始。