foreach и группы методов

Resharper значительно упростил цикл, но теперь меня беспокоит неиспользуемая переменная, как мне сделать это чисто?

foreach (Field Test in Line.Where(IsStartKey))
    Phase = ScanPhase.Processing;
...
private static bool IsStartKey(Field Test)
{
    return Test.Value.StartsWith("Cabinet Name");
}

Тест, конечно, использовался в оригинале, но после упрощения он бесполезен. Строка помечается, но никаких улучшений не предлагается.


person Loren Pechtel    schedule 22.05.2014    source источник


Ответы (1)


Кажется, что вам даже не нужна петля. Вам просто нужно знать, есть ли в Line какие-либо из желаемых элементов. Enumerable.Any может сделать это:

if (Line.Any(IsStartKey))
    Phase = ScanPhase.Processing;
person Mike Zboray    schedule 22.05.2014
comment
Разве IsStartKey не ожидает параметр? - person hatchet - done with SOverflow; 22.05.2014
comment
@hatchet Получает параметр: stackoverflow.com/questions/ 6988730/ - person Preston Guillot; 22.05.2014
comment
@PrestonGuillot - спасибо, я не использовал эту функцию, поэтому не узнал ее. @mikez - поскольку мы не знаем, что еще находится в цикле foreach, можем ли мы быть уверены, что Any эквивалентен? Что, если в теле есть элементы, которые должны выполняться три раза, если есть три элемента, прошедших тест IsStartKey? - person hatchet - done with SOverflow; 22.05.2014
comment
@hatchet Я сделал то, что считаю разумным предположением, что у нас есть весь соответствующий код. Многое возможно, если вы не видите весь код. Возможно, что Phase является свойством, вызывающим побочные эффекты, которые зависят от того, сколько раз оно было задано, и в этом случае это не эквивалентно. - person Mike Zboray; 22.05.2014
comment
Это именно то, что я искал. Ничего необычного не происходит. В большинстве случаев я нахожу, что LINQ делает код менее читаемым и его намного сложнее отлаживать, поэтому я держусь от него подальше, но иногда Resharper предлагает вещи, которые действительно улучшают его. Я хотел бы, чтобы он закончил работу здесь. - person Loren Pechtel; 23.05.2014
comment
@hatchet В оригинале был параметр. Упрощения Resharper уже скрыли это до того, как я застрял. Здесь не было ничего сложного, мне просто нужно было знать, содержит ли какой-либо из предметов ключ, который я искал. Майк был прав, предположив, что я разместил все, что имело отношение к делу. Фаза - это просто перечисление. - person Loren Pechtel; 23.05.2014