Using LINQ to Get Sum/ Average of a List with custom objects

c#, linq

Solution

The `Aggregate` function would come in handy here.

var sum = list.Aggregate((acc, cur) => acc + cur);
var average = list.Aggregate((acc, cur) => acc + cur) / list.Count;

Just insure that you have the `/` operator defined for types `PointD` and `int`, and this should do the job.

Note: I'm not quite sure whether you want the sum or average here (your question is somewhat ambiguous about this), but I've included examples for both.

Problem

I have a class: ``` public class PointD { public double X { get; set; } public double Y { get; set; } public PointD(double x, double y) { X = x; Y=y; } //operator for +,-, * and / are overridden } ``` Given a `list<PointD>`, how to get the average of it using LINQ? A `for` loop equivalent will be something like this: ``` double xx, yy; for ( int i=0; i< ptlist.Count; i++) { xx+=ptlist[i].X; yy+=ptlist[i].Y; } return new PointD(){X=xx, Y=yy}; ``` You can use any built-in LINQ function only. You can't define an extension that takes care of this function. Any idea? Edit: Of course, you can use two separate `Sum` extension method to Sum for X and Y component before merging them. But this is not what I want. What I want is a single query/ method that does the job

Original source