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

如何使用LINQ计算List<A>中嵌套List<B>的所有int x值的平均值?

解决嵌套集合中所有x值的平均值计算问题

嘿,我明白你卡在哪了!你之前用ForEach的思路走偏啦——ForEach本身是用来执行操作而非返回结果的方法,它的返回类型是void,所以根本没法通过它来收集数据并计算平均值。

正确的LINQ写法

要算出所有A对象里B的x值总平均值,核心是先把嵌套的List<B>"扁平化",变成一个包含所有B元素的单一序列,再直接对这个序列求平均。用SelectMany就能轻松搞定:

// 计算所有B对象的x属性的平均值
double averageX = Model.AList
    .SelectMany(a => a.BList) // 将所有A中的BList展开成一个 IEnumerable<B>
    .Average(b => b.x);       // 对展开后的所有B的x值求平均

处理空集合的特殊情况

如果你的AList可能为空,或者某个A的BList是空的,直接调用Average会抛出InvalidOperationException。这时候可以加一点额外处理避免异常:

方式1:用可空类型兼容空序列

double averageX = Model.AList
    .SelectMany(a => a.BList)
    .Select(b => (double?)b.x) // 将int转为可空double,空序列时Average返回null
    .Average() ?? 0; // 如果结果是null,返回默认值0(你可以改成自己需要的默认值)

方式2:先检查是否有有效元素

var allBs = Model.AList.SelectMany(a => a.BList);
double averageX = allBs.Any() ? allBs.Average(b => b.x) : 0;

为啥之前的写法行不通?

再补一句:ForEach是用来遍历集合执行有副作用的操作(比如打印元素、修改对象属性)的,它不适合做数据计算和返回结果。这类场景下,就得用LINQ的查询方法(比如SelectMany、Average),它们都是返回结果的,更适配数据处理需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:31:22