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;
感谢
这几乎是相同的代码,唯一的区别是,如果name
变量是null
,那么在第二个代码片段中,您将在运行时获得NullReferenceException
,因为您将在null实例上调用.ToUpper()
方法。第一个看起来更短、更安全、更可读,这是我会使用的。为了确保不会出现任何NRE:
return user
.Permissions
.Any(x => string.Equals(x.UpperName, name, StringComparison.OrdinalIgnoreCase));
使用Any是更好的方法,因为它是一行。它读起来更容易,占用的空间更少。
此外,还不清楚Permissions对象是什么,但如果它是代表数据库表的某种实体,那么Any肯定更好,因为您只返回查询的结果,foreach将在迭代开始前解析整个Permissions列表。