Перебор списка и условное задание члена - сравнение подходов - PullRequest
1 голос
/ 20 января 2011

У меня есть требование перебирать список и условно устанавливать элемент данных для каждого элемента в коллекции:

Используя стандартный итератор foreach, это тривиально:

//standard iteration
foreach (LogFileDataItem lfd in logFileData)
{
    if (lfd.FileName.Equals(currentLine, StringComparison.OrdinalIgnoreCase))
    {
        lfd.SQLScriptExecuted = true;
    }
}

Но это заставило меня задуматься о том, что это идеальная возможность для изучения LINQ, поэтому я реорганизовал вышеупомянутое:

foreach (LogFileDataItem lfd in logFileData.Where(item => item.FileName.Equals(currentLine, StringComparison.OrdinalIgnoreCase))
                                           .Select(item => item))
{
    lfd.SQLScriptExecuted = true;
}

Итак, мой вопрос на самом деле, насколько они отличаются?Есть ли какое-либо предложение существенное преимущество перед любым другим?

1 Ответ

3 голосов
/ 20 января 2011

Ну, вы можете избавиться от бита "Select (item => item)" из лямбда-версии (как на самом деле сделал бы компилятор C #):

foreach (LogFileDataItem lfd in logFileData.Where(item => 
    item.FileName.Equals(currentLine, StringComparison.OrdinalIgnoreCase))

Но в принципе, даони все делают одно и то же.Я хотел бы отделить запрос от цикла foreach:

var relevantLogItems = logFileData.Where(...);
foreach (var lfd in relevantLogItems)
{
    ...
}

, но опять-таки это не изменит происходящего.

...