C# Linq Any()vs foreach

C# Linq Any()vs foreach,c#,C#,只是想知道哪种方法更快更好地使用,或者您更喜欢哪种方法 bool userHavePermission = user.Permissions.Any(x => x.UpperName == "ADMINISTRATOR"); 或 谢谢这几乎是相同的代码,唯一的区别是,如果name变量是null,那么在运行时,使用第二个代码段,您将得到null referenceexception,因为您将在null实例上调用.ToUpper()方法。第一个看起来更短,更安全,更可读,这是我将使用的。并确

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

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


谢谢

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

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

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


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

实际上,这是相同的代码
Any
迭代
IEnumerable
应用谓词,在第一次匹配时返回true(并停止迭代)。也就是说,我会选择
任何
,因为很清楚代码试图做什么。您是否尝试过比较生成的IL代码?或者,如果不同的话,产生的jitted代码?这个问题完全是主观的,不是建设性的,因此不适合这样做。
return user
    .Permissions
    .Any(x => string.Equals(x.UpperName, name, StringComparison.OrdinalIgnoreCase));