经常情况下,我想要检查一个给定的值是否与列表中的某个值匹配(例如在验证时):
if (!acceptedValues.Any(v => v == someValue))
{
// exception logic
}
最近,我注意到ReSharper让我简化这些查询为:
if (acceptedValues.All(v => v != someValue))
{
// exception logic
}
显然,这在逻辑上是相同的,也许稍微更易读(如果你做过很多数学),我的问题是:这样做会导致性能下降吗?
感觉应该会(即 .Any()
听起来像是短路操作,而 .All()
听起来不是),但我没有证据证明这一点。有人对查询是否会解析为相同的结果,或者ReSharper是否在误导我有更深入的了解吗?
if (!sequence.Any(v => v == true))
。如果您希望仅在所有内容符合某种规范时继续进行:if (sequence.All(v => v < 10))
。 - Timo