如果找不到项目,我可以使用 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 检查差得多。空检查非常快。
我正在遍历一个列表如下:
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 检查差得多。空检查非常快。