求助:触发System.InvalidOperationException: Sequence contains no elements异常
问题与解决方法
问题
运行代码时抛出异常:
System.InvalidOperationException: 'Sequence contains no elements'
相关代码:
var highestCleredFormId = dataUpdates.Where(dat => dat.IsCleared).Select(dat => dat.ID).Max();
原因
当Where(dat => dat.IsCleared)过滤后没有符合条件的元素时,调用Max()方法会触发该异常——因为Max()要求序列必须包含至少一个元素才能计算最大值。
解决方案
根据你的.NET版本,选择以下方式处理:
方式1:.NET 6及以上版本(推荐)
使用MaxOrDefault()方法,空序列时返回对应类型的默认值(如int默认0):
var highestCleredFormId = dataUpdates.Where(dat => dat.IsCleared).Select(dat => dat.ID).MaxOrDefault();
如果需要自定义默认值,可传入参数:
var highestCleredFormId = dataUpdates.Where(dat => dat.IsCleared).Select(dat => dat.ID).MaxOrDefault(-1);
方式2:.NET 6以下版本
方案A:先判断序列是否有元素
var clearedIds = dataUpdates.Where(dat => dat.IsCleared).Select(dat => dat.ID); var highestCleredFormId = clearedIds.Any() ? clearedIds.Max() : 0; // 0替换为你需要的默认值
方案B:用DefaultIfEmpty配合Max
var highestCleredFormId = dataUpdates.Where(dat => dat.IsCleared).Select(dat => dat.ID).DefaultIfEmpty().Max();
同样,可给DefaultIfEmpty传参指定默认值:
var highestCleredFormId = dataUpdates.Where(dat => dat.IsCleared).Select(dat => dat.ID).DefaultIfEmpty(-1).Max();
内容的提问来源于stack exchange,提问作者Ashish Maurya
相关产品推荐
相关产品推荐

