InvalidOperationException

InvalidOperationException

This question already has answers here:
Max return value if empty query
                                
                                    (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