Search code examples
c#.netlinqoopsum

Linq SUM on objects which have operator+?


I've an object that represent a business data.

Basically, it's an object agregating some totals:

public class MyClass{
   public double MyDataOne {get;set;}
   public double MyDataTwo {get;set;}
   public double MyDataThree {get;set;}

   public static MyClass operator +(MyClass data1, MyClass data2){
      return new MyClass{MyDataOne = data1.MyDataOne + data2.MyDataOne, MyDataTwo=data1.MyDataTwo+data2.MyDataTwo, MyDataThree=data1.MyDataThree+data2.MyDataThree };
   }
}

Now, if I've an IEnumerable<MyClass> myClasses, Is there somethings I can implement in MyClass to make this:?

myClasses.Sum(d=>d);

Because for me, the way an object is additioned must be the knowledge of the object and not the caller(if one day I've one data more, I don't want to look in my whole code to see where it is used).

Thank you


Solution

  • Write your own extension method:

    public static MyClass Sum(this IEnumerable<MyClass> source)
    {
        var result = new MyClass(); // all data will be zeros
    
        foreach(var item in source)
           result = result + item;
    
        return result;
    }
    

    Usage:

    var sum = myClasses.Sum();