如果找不到项目,我可以使用 LINQ First() 和 return null 吗?

Can I use LINQ First() and return null if no item is found?

我正在遍历一个列表如下:

var user = Userlist.FirstOrDefault(t => t.userId == currentUserId);
if (user != null)
{ 
    //do whatever 
}

如果没有找到元素,它 returns null 我可以检查它。

但是如果我使用.First(),它会更快一些。但是如果没有找到元素,它会给出一个序列错误,Sequence contains no matching element

var user = Userlist.First(t => t.userId == currentUserId);

那么,我可以在 LINQ 中使用 First() 吗,如果没有找到元素,请先检查再继续,因为我发现 First() 更快?

不,IEnumerable<T>.First() 有意 如果在可枚举项中找不到匹配项,则抛出异常。这是设计使然,这就是存在 FirstOrDefault() 扩展的原因。

First()FirstOrDefault() 应该具有非常相似(如果不相同)的性能。它们都将在 O(n) 时间内执行。

如果您认为 First() 会在找不到匹配元素时生成异常,那么该异常对性能的影响几乎肯定会比执行 null 检查差得多。空检查非常快。