重复 What is the purpose/advantage of using yield return iterators in C#?
好吧,这不是这个。你能否详细解释一下这两者有何不同?
喜欢返回一个数组(比方说字符串) 或使用iterator(也是字符串)进行yield return
我觉得它们是一样的。 请详细说明。
答案 0 :(得分:9)
数组是指向固定大小的随机访问数据块的指针。调用者可以更新值,以任何顺序访问值等。
迭代器是值的序列的关键(可以是无限长)。调用者只能按源提供的顺序访问它们,并且无法更新它们。
访问序列中的每个值有更多的开销,但它具有不需要同时处理所有数据的优点,因此对于中长序列可以更有效。
答案 1 :(得分:2)
如果返回无法更改内部数据结构的迭代器,则可能不需要复制它。
另一方面,一个常见的错误是返回你在内部使用的东西,这将允许外部代码修改你的内部数据结构,这通常是一个很大的禁忌。
例如,请考虑以下事项:
Int32[] values = otherObj.GetValues();
values[0] = 10;
如果GetValues方法只返回一个内部数组,那么第二行现在将改变该数组的第一个值。
答案 2 :(得分:2)
数组是数据存储。迭代器只是生成序列的其他数据存储或方法的迭代器。
因此,如果方法返回一个数组,您可以修改它及其元素。你不能通过迭代器来做到这一点。此外,阵列的大小有限。迭代器可以是无限的。
答案 3 :(得分:1)
迭代器无法修改,但数组可以。您可以使用[index]表示法引用数组中的特定项,但是使用迭代器,您只能按顺序从第一个元素开始。