C# 面试题 目录

C# 中迭代器 (Iterator) 的概念和实现

推荐答案

在 C# 中,迭代器(Iterator)是一种用于遍历集合(如数组、列表等)的机制。通过使用 yield return 语句,可以简化集合的遍历过程。迭代器允许你在不实现整个 IEnumerator 接口的情况下,轻松地创建一个自定义的集合遍历器。

以下是一个简单的迭代器实现示例:

-- -------------------- ---- -------
----- -------
----- -------------------

------ ----- -------
-
    ------ ------ ---------------- ------------
    -
        ----- ------ --
        ----- ------ --
        ----- ------ --
    -

    ------ ------ ---- ------
    -
        ------- ---- ------ -- -------------
        -
            --------------------------
        -
    -
-

在这个示例中,GetNumbers 方法是一个迭代器方法,它使用 yield return 语句返回一个整数序列。Main 方法通过 foreach 循环遍历这个序列并输出每个数字。

本题详细解读

迭代器的概念

迭代器是一种设计模式,它允许你顺序访问一个集合中的元素,而不需要暴露集合的内部结构。在 C# 中,迭代器通常通过实现 IEnumerableIEnumerator 接口来实现。然而,使用 yield return 语句可以简化这个过程。

yield return 语句

yield return 是 C# 中的一个关键字,用于在迭代器方法中返回一个值。当编译器遇到 yield return 时,它会自动生成一个状态机来管理迭代器的状态。这使得你可以轻松地编写迭代器方法,而不需要手动实现 IEnumerator 接口。

迭代器方法的执行流程

  1. 调用迭代器方法:当你调用一个迭代器方法时,它并不会立即执行方法体中的代码,而是返回一个 IEnumerable 对象。
  2. 遍历集合:当你使用 foreach 循环遍历这个 IEnumerable 对象时,迭代器方法中的代码才会开始执行。
  3. 暂停和恢复:每次遇到 yield return 语句时,迭代器方法会暂停执行,并返回当前的值。下一次迭代时,方法会从上次暂停的地方继续执行。

示例代码解析

在这个示例中,GetNumbers 方法是一个迭代器方法。它使用 yield return 语句返回一个整数序列。每次调用 yield return 时,方法会暂停并返回当前的值。当 foreach 循环再次调用迭代器时,方法会从上次暂停的地方继续执行。

使用 foreach 遍历迭代器

在这个 foreach 循环中,GetNumbers 方法会被调用,并返回一个 IEnumerable<int> 对象。foreach 循环会依次遍历这个对象中的每个元素,并输出到控制台。

总结

通过使用 yield return 语句,C# 中的迭代器提供了一种简单而强大的方式来遍历集合。它简化了集合遍历的实现,并且使得代码更加清晰和易于维护。

纠错
反馈