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

使用LINQ SkipWhile方法未达预期输出,禁用OrderBy如何调整?

问题分析与修正

你的程序确实存在问题,核心是对SkipWhile的逻辑理解有误,同时条件表达式完全不符合需求。

问题出在哪?

SkipWhile的工作逻辑是:从列表开头开始,只要元素满足条件就跳过,一旦遇到第一个不满足条件的元素,就停止跳过,保留该元素及之后的所有元素——它不是用来过滤所有满足条件的元素,只处理列表开头的连续满足项。

你写的条件i > 4 && x > 4,第一个元素索引i=0,显然不满足i>4,所以SkipWhile直接停止跳过操作,返回整个列表,这就是为什么你会得到全部元素的输出。

如何修正得到期望输出?

要得到8、9、10,结合你禁用OrderBy的需求,有两种直观写法:

写法1:按元素值筛选

先跳过所有小于等于7的元素,再截取所有大于7的元素:

using System;
using System.Linq;
using System.Collections.Generic;
                                
public class Program
{
    public static void Main()
    {
        IList<int> numbersList = new List<int>(){ 1, 4, 5, 6, 7, 8, 9, 10, 2, 3 };
        
        var result = numbersList.SkipWhile(x => x <=7).TakeWhile(x => x >7);
        
        foreach(var num in result)
            Console.WriteLine(num);
    }
}

写法2:按索引定位

如果你明确知道目标元素的索引范围,可跳过前5个元素(索引0-4),再取前3个:

var result = numbersList.SkipWhile((x,i) => i <5).Take(3);

两种写法都能输出你想要的8、9、10。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:23:29