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

如何解决System.Linq.dll中Sequence contains no elements异常?

解决Sequence contains no elements异常问题

你的代码抛出System.InvalidOperationException(提示“Sequence contains no elements”),核心原因是**Aggregate方法在处理空序列时会触发这个异常**——当MenuSwitchInfo为空、为null,或者Where(ms => ms.IsActive)过滤后没有符合条件的元素时,Aggregate没有初始值就会报错。

你尝试的DefaultIfEmpty()之所以没用,是因为它被放在Where之前:给空集合添加的默认null元素,会被后续的Where(ms => ms.IsActive)过滤掉(null访问IsActive会抛空引用,或直接不满足条件),最终还是空序列,Aggregate依然报错。

以下是几种可行的解决思路:

1. 给Aggregate指定初始值

给Aggregate传入初始空字符串,同时调整聚合逻辑,空序列时直接返回初始值:

return MenuSwitchInfo?
        .Where(ms => ms.IsActive)
        .Select(ms => ms.Id.ToString())
        .Aggregate(string.Empty, (a, b) => string.IsNullOrEmpty(a) ? b : $"{a}, {b}")
        .Trim();

2. 先判断序列是否为空再执行聚合

先检查过滤后的序列是否有元素,无元素时直接返回空字符串:

var activeIds = MenuSwitchInfo?.Where(ms => ms.IsActive).Select(ms => ms.Id.ToString()) ?? Enumerable.Empty<string>();
return activeIds.Any() ? activeIds.Aggregate((a, b) => $"{a}, {b}").Trim() : string.Empty;

3. 用string.Join替代Aggregate(推荐)

string.Join本身支持空序列,会直接返回空字符串,写法更简洁:

return string.Join(", ", MenuSwitchInfo?.Where(ms => ms.IsActive).Select(ms => ms.Id.ToString()) ?? Enumerable.Empty<string>()).Trim();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:33:12