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));