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

C#实现last3YearsInInches方法时取最后3个元素报错求助

问题分析与代码修正

原代码的核心错误:

  • list.Reverse<Double>()是List的内置方法,属于**无返回值(void)**操作,它会直接修改原列表的元素顺序,无法链式调用Take(3)。
  • Take(3)返回的是IEnumerable<double>类型的集合,不能直接赋值给double变量,类型完全不匹配。
  • 就算拿到了最后三个元素的集合,直接用集合除以3是无效操作,必须先计算元素总和再求平均,或者直接调用LINQ的平均方法。

修正后的高效写法:

using System.Linq; // 必须引用LINQ命名空间

public double Last3YearsInInches(List<double> list )
{
    if (list?.Count < 3) // 增加空判断,避免传入null时抛出异常
    {
        return 100;
    }
    else
    {
        // 跳过前面的元素,直接取最后3个,比反转整个列表性能更优
        var lastThreeElements = list.Skip(list.Count - 3);
        return lastThreeElements.Average();
    }
}

另一种反转实现的写法:

如果一定要用反转逻辑,需要使用LINQ的Reverse()方法(它会返回新的反转集合,不会修改原列表):

using System.Linq;

public double Last3YearsInInches(List<double> list )
{
    if (list?.Count < 3)
    {
        return 100;
    }
    else
    {
        var lastThreeElements = list.AsEnumerable().Reverse().Take(3);
        return lastThreeElements.Average();
    }
}

额外说明:

  • 必须添加using System.Linq;才能使用Skip、Reverse、Take、Average这些LINQ扩展方法。
  • 方法名改成了大驼峰格式(Last3YearsInInches),符合C#的命名规范。
  • 新增的list?.Count空判断,能避免传入null列表时触发空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:15:43