Относительно эффективности метода LINQ Any () - PullRequest
1 голос
/ 20 января 2012

Есть ли разница в производительности между этими двумя подходами?

// First approach, iterating until a match
public bool Find(IEnumerable<Object> allObjects, Object testObj)
{
  foreach (Object obj in allObjects)
  {  
    if (obj.Equals(testObj))
    { return true; }
  }
  return false;
}

// Second approach, using LINQ and Any()
public bool Find(IEnumerable<Object> allObjects, Object testObj)
{
  var query = from Object obj in allObjects where obj.Equals(testObj) select obj;
  return query.Any();  
}

Мой вопрос: сравнивает ли версия LINQ testObj с всеми объектами в коллекции, а затем метод Any () проверяет, является ли результирующая коллекция пустой. Как правило, это будет менее эффективно, чем в первом случае, когда итерация останавливается после первого совпадения.

1 Ответ

7 голосов
/ 20 января 2012

Нет, производительность должна быть эквивалентной - Any() прекратит итерацию по перечислению источника после первого совпадения.

Также вы можете сделать это более кратким (и более простым для чтения и понимания, ноэто вопрос мнения) используя синтаксис метода:

return allObjects.Any(obj => obj.Equals(testObj));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...