【问题标题】:Difference between Iterator and Array in c#c#中迭代器和数组的区别
【发布时间】:2010-11-20 05:11:28
【问题描述】:

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

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

就像返回一个数组(比方说字符串) 或使用迭代器(也是字符串)进行收益返回

我发现它们是一样的。 请详细说明。

【问题讨论】:

标签: c# arrays iterator


【解决方案1】:

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

迭代器是一个序列值的键(它的长度可能是无限的)。调用者只能按照源提供的顺序访问它们,不能更新它们。

访问序列中的每个值有更多开销,但它的优点是不需要一次所有数据,因此对于中长序列可能更有效。

【讨论】:

    【解决方案2】:

    如果你返回一个不能改变内部数据结构的迭代器,你可能不需要复制它。

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

    例如,考虑以下情况:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 所以如果你想制作 DLL 或类来返回一些东西给第三方程序(他们使用我们的)你应该使用迭代器吗?
        • 没错!或者返回数组的副本。
        猜你喜欢
        • 2010-10-27
        • 1970-01-01
        • 2012-06-14
        • 2011-01-25
        • 2014-12-05
        • 2020-02-28
        • 1970-01-01
        • 2018-12-29
        • 2010-10-31
        相关资源
        最近更新 更多