使用linq获取对象的总和

ilk*_*nal -3 c# linq sum

我有如下列表.

名单

  • 3约翰
  • 1 Scully
  • 4爱德华
  • 9金

试图用linq转换为;

名单

  • 3约翰
  • 4 Scully
  • 8爱德华
  • 17金

如果没有for循环我怎么能这样做.我想用linq实现这个目标.

Eri*_*ert 5

在LINQ中没有一种方法可以做到这一点; 你将不得不自己写.尝试这样的事情:

using System;
using System.Collections.Generic;

static class MyExtensions
{
    public static IEnumerable<TResult> AggregatingSelect<TItem, TAggregate, TResult>(
        this IEnumerable<TItem> items,
        Func<TItem, TAggregate, TAggregate> aggregator,
        TAggregate initial,
        Func<TItem, TAggregate, TResult> projection)
    {
        TAggregate aggregate = initial;
        foreach (TItem item in items)
        {
            aggregate = aggregator(item, aggregate);
            yield return projection(item, aggregate);
        }
    }

}
class Program
{
    static void Main(string[] args)
    {
        var numbers = new[] { 3, 1, 4, 9 };
        var result = numbers.AggregatingSelect(
            (int item, int agg) => item + agg, 
            0, 
            (int item, int agg) => agg);
        Console.WriteLine(string.Join(",", result));
    }
}
Run Code Online (Sandbox Code Playgroud)