Linq Any() vs foreach

本文关键字:vs foreach Any Linq | 更新日期: 2023-09-27 17:59:30

只是想知道使用哪种方法更快更好,或者你更喜欢

bool userHavePermission = user.Permissions.Any(x => x.UpperName == "ADMINISTRATOR");

foreach (Permission p in _Permissions)
{
    if (p.UpperName == name.ToUpper())
       return true;
}
return false;

感谢

Linq Any() vs foreach

这几乎是相同的代码,唯一的区别是,如果name变量是null,那么在第二个代码片段中,您将在运行时获得NullReferenceException,因为您将在null实例上调用.ToUpper()方法。第一个看起来更短、更安全、更可读,这是我会使用的。为了确保不会出现任何NRE:

return user
    .Permissions
    .Any(x => string.Equals(x.UpperName, name, StringComparison.OrdinalIgnoreCase));

使用Any是更好的方法,因为它是一行。它读起来更容易,占用的空间更少。

此外,还不清楚Permissions对象是什么,但如果它是代表数据库表的某种实体,那么Any肯定更好,因为您只返回查询的结果,foreach将在迭代开始前解析整个Permissions列表。