LINQ или foreach - стиль / удобочитаемость и скорость

У меня есть фрагмент кода для некоторой логики проверки, которая в обобщенном виде выглядит следующим образом:

private bool AllItemsAreSatisfactoryV1(IEnumerable<Source> collection)
{
    foreach(var foo in collection)
    {
        Target target = SomeFancyLookup(foo);
        if (!target.Satisfactory)
        {
            return false;
        }
    }
    return true;
}

Это работает, довольно легко понимает, и имеет раннюю оптимизацию. Однако он довольно многословен. Основная цель этого вопроса - то, что считается удобочитаемым и хорошим стилем. Меня также интересует производительность; я твердо верю, что преждевременное {оптимизация, пессимизация} является корнем всего зла , и постарайтесь избегать микрооптимизации, а также создания узких мест.

Я новичок в LINQ, поэтому хотел бы получить несколько комментариев по две альтернативные версии, которые я придумал, а также любые другие предложения относительно удобочитаемости.

private bool AllItemsAreSatisfactoryV2(IEnumerable<Source> collection)
{
    return null ==
        (from foo in collection
        where !(SomeFancyLookup(foo).Satisfactory)
        select foo).First();
}

private bool AllItemsAreSatisfactoryV3(IEnumerable<Source> collection)
{
    return !collection.Any(foo => !SomeFancyLookup(foo).Satisfactory);
}

Я не верю, что V2 предлагает намного больше, чем V1 с точки зрения r проходимость, даже если короче. Я считаю V3 ясным и кратким, но мне не очень нравится метод Method ().Собственность часть; конечно, я мог бы превратить лямбду в полноценного делегата, но тогда он теряет однострочную элегантность.

Я бы хотел прокомментировать следующее:

  1. Стиль - очень субъективный, но что вы чувствуете читабельным?
  2. Производительность - это однозначное «нет-нет»? Насколько я понимаю, все три метода должны быть отключены раньше срока.
  3. Возможность отладки - что-нибудь рассмотреть?
  4. Альтернативы - все подходит.

Заранее спасибо :)

6
задан snemarch 7 September 2010 в 22:38
поделиться