This question already has answers here:
Max return value if empty query
(11个答案)
4年前关闭。
我有一个代码:
在大多数情况下,它都有效。但有时会在fullist.Max上引发InvalidOperationException。我在这里做错了什么?如果有检查if(fullist.Count()== 0)返回0,那么丰满主义者如何才能为空; ?
(11个答案)
4年前关闭。
我有一个代码:
var fullist = Enumerable.Where<CooldownRecord>(GetCooldowns(petskills), s => (spellId.Contains((uint)s.SpellId) || (SharedIds.Contains((uint)s.SharedId) && s.SharedId != 0)) && s.TimeLeft > 0);
if(fullist.Count() == 0) return 0;
return fullist.Max(s => s.TimeLeft);
在大多数情况下,它都有效。但有时会在fullist.Max上引发InvalidOperationException。我在这里做错了什么?如果有检查if(fullist.Count()== 0)返回0,那么丰满主义者如何才能为空; ?
最佳答案
如果查看documentation,则会发现如果输入序列为空,则会抛出InvalidOperationException
。
如果它从第二行更改为第三行,则有可能。
但是无论如何我不会多次执行查询。您可以使用DefaultIfEmpty(0)
int maxTimeLeft = GetCooldowns(petskills)
.Where(s => (spellId.Contains((uint)s.SpellId) || SharedIds.Contains((uint)s.SharedId)) && s.SharedId != 0)) && s.TimeLeft > 0)
.Select(s => s.TimeLeft)
.DefaultIfEmpty(0)
.Max();
return maxTimeLeft;
07-24 09:32