【发布时间】:2013-07-16 07:15:39
【问题描述】:
您好,我有以下代码:
if (!_jobs.Any(j => j.Id == emailJob.Id))
{
}
此代码应找到满足条件的任何元素。所以我会假设它应该在找到第一个元素后返回,如下所示:
if (!_jobs.FirstOrDefault(j => j.Id == emailJob.Id) != null)
{
}
Resharper 尝试将此 LINQ 表达式简化为:
if (_jobs.All(j => j.Id != emailJob.Id))
{
}
这对我来说似乎效率较低,因为它必须检查每个元素是否满足逆条件。
抱歉,我只是误解了 LINQ 的工作原理。
乔
【问题讨论】:
-
如果它们都与该 ID 不同,您将不得不检查整个列表。即使在第一个示例中。
-
如果抽屉里还有一只袜子你还没看,你怎么能说那个人X没有红袜子呢?
-
是的,但是如果您处于列表可能包含具有匹配 ID 的元素的情况,那么它会更快。假设我已经了解 .Any() 如何正常工作。
-
同样有效 -
!Any()也必须检查所有这些,因为最后一个元素仍然可以满足条件。它只是归结为布尔代数 - NOT OR 等价于 AND NOT。 -
不行,一旦失败,两个都会停止。