2

こんにちは、次のコードがあります。

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 の仕組みを誤解しているだけなら申し訳ありません。

ジョー

4

3 に答える 3

1

emailJob id に一致するジョブがある場合、.Any()アプローチは早期に中止できます。同様に、この.All()アプローチは、同じジョブで発生する false の条件を見つけるとすぐに動作を停止する可能性があります。効率はほぼ同じはずです。

于 2013-07-17T16:11:21.753 に答える