You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中是否存在Python的iter()和next()函数的等效实现?

C# 中与 Python iter() 和 next() 等效的功能

Python 里的iter()和next()对应 C# 中的**枚举器(Enumerator)**机制,核心依托IEnumerable<T>和IEnumerator<T>接口实现:

  • 对应iter()的是GetEnumerator()方法:任何实现IEnumerable<T>的集合(比如List<T>、数组、自定义序列等)都可调用该方法获取枚举器实例。
  • 对应next()的是IEnumerator<T>的MoveNext()方法 + Current属性:MoveNext()会将枚举器推进到下一个元素,返回bool值表示是否还有剩余元素;Current用于获取当前指向的元素。当没有更多元素时,MoveNext()返回false,作用等同于 Python 的StopIteration异常。

等效实现:合并两个有序列表

以下是你提供的 Python 合并代码的 C# 等效版本,同样不使用 for 循环和索引,完全基于枚举器实现:

using System;
using System.Collections.Generic;

public static IEnumerable<int> Merge(IEnumerable<int> nums1, IEnumerable<int> nums2)
{
    using var enumerator1 = nums1.GetEnumerator();
    using var enumerator2 = nums2.GetEnumerator();

    bool hasNext1 = enumerator1.MoveNext();
    bool hasNext2 = enumerator2.MoveNext();

    int num1 = enumerator1.Current;
    int num2 = enumerator2.Current;

    while (true)
    {
        if (num1 <= num2)
        {
            yield return num1;
            hasNext1 = enumerator1.MoveNext();
            if (!hasNext1)
            {
                yield return num2;
                while (enumerator2.MoveNext())
                {
                    yield return enumerator2.Current;
                }
                break;
            }
            num1 = enumerator1.Current;
        }
        else
        {
            yield return num2;
            hasNext2 = enumerator2.MoveNext();
            if (!hasNext2)
            {
                yield return num1;
                while (enumerator1.MoveNext())
                {
                    yield return enumerator1.Current;
                }
                break;
            }
            num2 = enumerator2.Current;
        }
    }
}

public class Program
{
    public static void Main()
    {
        var nums1 = Range(0, 10, 2);
        var nums2 = Range(1, 20, 3);
        foreach (var num in Merge(nums1, nums2))
        {
            Console.Write(num + " ");
        }
        // 输出:0 1 2 4 7 8 10 13 16 19
    }

    // 模拟Python的range生成序列
    private static IEnumerable<int> Range(int start, int end, int step)
    {
        for (int i = start; i < end; i += step)
        {
            yield return i;
        }
    }
}

关键细节说明

  1. GetEnumerator():获取集合的枚举器实例,对应 Python 的iter()。C# 中枚举器实现了IDisposable,因此用using语句自动释放资源。
  2. MoveNext()和Current:两者组合对应 Python 的next()。MoveNext()负责推进枚举器位置,返回值判断是否还有元素;Current获取当前位置的元素。
  3. yield return:和 Python 的yield语法逻辑一致,用于创建延迟执行的迭代器方法,避免一次性加载所有数据到内存。

内容的提问来源于stack exchange,提问作者joseville

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 18:43:32