C # Об IEnumerable.Aggregate

#c# #linq #aggregate

#c# #linq #агрегат

Вопрос:

Я провел несколько тестов о IList<T>.Aggregate() , но ответ не имеет смысла для меня.

 List<int> Data1 = new List<int> { 1,0,0,0,0};

var result = Data1.Aggregate<int>((total, next) => total   total);
  

Результатом является 16 .

Я ожидал, что это будет 32 .

Кто-нибудь может объяснить?

Комментарии:

1. Хм … почему ты думаешь, что это должно быть 30?

2. результат переменной = Data1. Aggregate(0, (total, next) => total total); На этот раз ответ равен 0, я предполагаю это, потому что начальное значение для накопителя (total) равно 0, и передайте total = 0 в функции обратного вызова.

3. Вы правы. Это полностью проигнорирует элементы в списке.

Ответ №1:

Aggregate не выполняет обратный вызов для первого элемента в списке. Скорее, первый элемент используется в качестве начального значения для накопителя ( total ).
Следовательно, ваш обратный вызов выполняется только четыре раза, а не пять, и 24 = 16.