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

移除最大值时LINQ报CS1936错误,如何修正?

解决LINQ查询中CS1936错误的问题

嘿,我来帮你搞定这个CS1936错误!你遇到的问题核心很简单——standDev是单个long类型的数值(毕竟标准差计算出来就是一个具体的数值,不是一堆元素组成的集合),但LINQ的Where方法只能用在实现了IEnumerable<T>的集合上,所以你没法对单个数值用from item in standDev这种集合遍历的语法,这就是报错的原因。

再看你的代码逻辑,其实还有个误区:你本来是想移除DailyStandard里functionTime最大的条目,但当前代码里算平均值、标准差的操作,和你要实现的目标完全不搭边,反而绕错了方向。

给你两个直接修正的方案,都是针对“移除DailyStandard中functionTime最大元素”这个目标的:

方案一:排序后取最大值元素移除

if (DailyStandard.Count() > 10)
{
    // 按functionTime降序排序,取第一个就是最大值元素
    var maxItem = DailyStandard.OrderByDescending(x => x.functionTime).FirstOrDefault();
    // 确保找到元素再移除(避免空引用)
    if (maxItem != null)
    {
        DailyStandard.Remove(maxItem);
    }
}

方案二:先找最大值,再匹配元素移除

if (DailyStandard.Count() > 10)
{
    // 先拿到functionTime的最大值
    var maxValue = DailyStandard.Max(x => x.functionTime);
    // 找到对应这个最大值的元素
    var maxItem = DailyStandard.FirstOrDefault(x => x.functionTime == maxValue);
    if (maxItem != null)
    {
        DailyStandard.Remove(maxItem);
    }
}

额外说明

  • 如果DailyStandard是List<T>类型,上面的Remove方法可以直接用;如果它是IEnumerable<T>这类不支持直接移除的集合,你可以用Where过滤掉最大值元素后重新赋值,比如:
    DailyStandard = DailyStandard.Where(x => x.functionTime != maxValue).ToList();
    
  • 如果你原本的逻辑里标准差是有用的(比如要移除超过标准差范围的极值?),那你得再明确下需求,但从当前的错误代码来看,你应该是想直接移除functionTime最大的条目,上面的方案就足够解决问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:50:25