移除最大值时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
相关产品推荐
相关产品推荐

