Глядя на ваш пример, я вижу, что вы пытаетесь сказать. Итак, вы хотите использовать те же логики c, что и в вашем методе Calculator, но с использованием лямбда-выражения. Самый простой способ сделать это - использовать Language Integrated Query (LINQ).
Итак, разбивая ваш метод Calculator (), мы видим, что он на самом деле содержит 2 элемента.
- Суммируйте каждое значение после объединения num1 с num2 в списке
- Разделите конечный результат на общее количество в списке.
Самый простой способ сделать это - использовать Enumerable.Sum, а затем разделить это значение на количество в списке. Например:
Pairs.Sum(pair => pair.num1 + pair.num2) / Pairs.Count
Result: 6
Вот пример кода
Enumerable.Sum - это метод расширения из пространства имен System.Linq. Он возвращает сумму числовых c значений в коллекции.
Хотя лямбда-выражения потрясающие, имейте в виду, что читаемость также очень важна. Это в основном анонимные функции, которые, если logi c станет сложным, будут трудны для понимания другими разработчиками / членами команды.
Надеюсь, это поможет. Удачи!
РЕДАКТИРОВАТЬ
Так что, если я правильно понимаю, вам будет трудно использовать лямбда-выражения с вложенными методами. Как, например, ваш метод Calculator () использует другой метод ToMinutes.
Используя код из моего первого примера, мы все еще можем использовать логи c. Самая важная часть, которую мы должны изменить - это логика c в пределах суммы. Например,
Days.Sum(day => ToMinutes(day.sunDown) - ToMinutes(day.sunUp )) / totalDays;
Это только один из способов сделать это. Другой вариант - создать ExtensionMethod. Например,
namespace ExtensionMethods
{
public static class IntExtensions
{
public static int ToMinutes(this int time)
{
return time / 100 * 60 + time - time / 100 * 100;
}
}
}
Над классом, который вы хотите использовать метод расширения, просто включите его, написав
using ExtensionMethods;
в верхней части документа.
Это даст другой вариант для всех ваших целых чисел, чтобы проанализировать значение на другое значение. В нашем случае до минут.
int totalDays = Days.Count;
int averageMinutes = Days.Sum(day => day.sunDown.ToMinutes() - day.sunUp.ToMinutes()) / totalDays;
Console.WriteLine("There is an average of {0} minutes of night over the past {1} days.", averageMinutes, totalDays);
Но опять. Это один из способов сделать это. Я бы порекомендовал вам прочитать и прочитать C# в глубину Джона Скита, а также погрузиться в принципы чистого кода. См. пример кода для получения более подробной информации.
Удачи!