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

如何实现C#中往返式for循环?求更优雅的优化方案

优雅实现往返遍历的几种方案

你可以通过以下几种方式简化代码,提升可读性,同时去掉冗余的布尔变量:

方案1:用步长变量动态控制方向

用一个step变量控制每次的增量,到达边界时反转步长值,逻辑更紧凑:

static void Main(string[] args)
{
    int i = 0;
    int step = 1;
    
    while (true)
    {
        Console.WriteLine(i);
        
        // 碰到边界就反转步长
        if (i == 10 || i == 0)
            step *= -1;
        
        i += step;
        Thread.Sleep(20);
    }
}

这种写法把方向控制浓缩到步长变量的反转上,避免了多个独立的if判断,逻辑更清晰,也不需要额外的布尔标记。

方案2:预先生成遍历序列(声明式风格)

如果只需要完成一次往返(0→10→0),可以直接生成完整的遍历序列再遍历输出,可读性拉满:

static void Main(string[] args)
{
    // 先生成0到10的正向序列,再拼接9到1的反向序列
    var sequence = Enumerable.Range(0, 11)
                             .Concat(Enumerable.Range(1, 9).Reverse());
    
    foreach (int i in sequence)
    {
        Console.WriteLine(i);
        Thread.Sleep(20);
    }
    
    // 需要无限循环的话,把foreach套进while(true)即可
}

这种写法直接表达了「先遍历0到10,再遍历9到0」的意图,几乎不需要注释就能理解,适合逻辑明确的场景。

方案3:数学公式计算(无状态实现)

利用三角波公式直接计算每一步的i值,不需要边界判断就能生成往返序列:

static void Main(string[] args)
{
    int max = 10;
    int stepCount = 0;
    
    while (true)
    {
        // 通过取模和绝对值生成往返的数值
        int i = max - Math.Abs(max - stepCount % (2 * max));
        Console.WriteLine(i);
        
        stepCount++;
        Thread.Sleep(20);
    }
}

这种方式不需要维护任何状态变量,适合对性能要求较高或者不想管理边界判断的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:51:14