Ваш код LINQ не "напрямую" нарушает упомянутые вами рекомендации, потому что вы не изменяете сам список; вы просто изменяете какое-то свойство содержимого списка.
Тем не менее, основное возражение, лежащее в основе этих рекомендаций, остается: вам не следует изменять данные с помощью LINQ (также вы злоупотребляете Select
для выполнения побочных эффектов).
Не изменяя любые данные, можно довольно легко обосновать. Рассмотрим этот фрагмент:
fResults.Where(flight => flight.NonStop)
Вы видите, где это изменяет свойства полета? Как и многие программисты по обслуживанию, они перестанут читать после Where
- следующий код явно не содержит побочных эффектов, так как это запрос, верно?
[Nitpick: Конечно, просмотр запроса, возвращаемое значение которого не сохраняется, является мертвой раздачей того, что запрос имеет побочные эффекты или что код должен быть удален; в любом случае, это "что-то не так". Но гораздо проще сказать, что, когда нужно смотреть только две строки кода, а не страницы на страницах.]
Как правильное решение, я бы порекомендовал это:
foreach (var x in fResults.Where(flight => flight.NonStop))
{
x.Description = "Fly Direct!";
}
Довольно легко писать и читать.