2016-01-11 3 views
0

У меня есть следующий метод, содержащий простой цикл foreach в классе C#. Метод возвращает сумму итогов, рассчитанных с использованием функции в отдельном классе.Рефактор C# foreach Loop в оператор Linq

private readonly ICalculateTotalService _calculateTotalService; 

    public decimal GetTotal(IOrder order) 
    { 
     decimal paidTotal = 0; 

     foreach (var line in order.Lines) 
     { 
      paidTotal += _calculateTotalService.GetTotal(line); 
     } 

     return paidTotal; 
    } 

Решение Resharper предполагает, что это может быть реорганизовано в оператор LINQ. Каким будет лучший способ сделать это?

+7

Вы можете позволить Resharper сделать изменения. Вы должны иметь возможность щелкнуть значок в поле. –

+2

Позвольте ReSharper внести изменения, а затем, если вы не понимаете, что это сделано, опубликуйте оригинальный и измененный код и спросите, почему они эквивалентны. – ChrisF

+1

Как говорили другие, просто нажмите лампочку и дайте ей внести изменения для вас. Я упомянул, что не всегда лучше конвертировать его - у меня был действительно чистый и читаемый код, и ReSharper предложил преобразовать его, поэтому я сделал это предложение, и это стало беспорядочным и нечитаемым беспорядком. Вы должны сделать запрос на то, что более читаемо. В вашем случае я думаю, что запрос LINQ выйдет так же читаемо (если не больше), чем то, что у вас есть сейчас. – maxshuty

ответ

5

Если IOrder.Lines является IEnumerable типа или аналогичного, который поддерживает LINQ:

private readonly ICalculateTotalService _calculateTotalService; 

public decimal GetTotal(IOrder order) 
{ 
    return order.Lines.Sum(line => _calculateTotalService.GetTotal(line)); 
} 
Смежные вопросы