Using delegates and lambda expressions, write code to allow a list of numbers to be aggregated. Show two examples of use: 1) all numbers in the list are summed and 2) all numbers in the list are multiplied?

Example: c# delegate lambda

// ------------ DELEGATE, ANONYMOUS FUNCTIONS and LAMBDA ------------ //

// DELEGATE:

public class Program
{
    // Delegate
    public delegate double MathOperation(double x, double y);
  
	// 1º Method
    static double Addition(double x, double y)
    {
        return x + y;
    }
  
	// 2º Method 
    static double Multiply(double x, double y)
    {
        return x * y;
    }

  	// 3º Method 
    static double Subtration(double x, double y)
    {
        return x - y;
    }

    // Main
    static void Main(string[] args)
    {	
      
      	// Normal Delegate:
      
        MathOperation myFunction = Addition;  

        Console.WriteLine("The math gives: " + myFunction(2.6, 8.0));
      
        MathOperation myFunction2 = Multiply;  

        Console.WriteLine("The math gives: " + myFunction2(7.9, 1.6));
      
      
        // Multicast Delegate:
      	
      	MathOperation multiFunction = Addition + Multiply;
      	multiFunction += Subtration;    // Add one more pointer to the method Subtration 
      
      	multiFunction(3.1, 4.5)  // It will call all 3 Methods with the same pair of parameters  
      
      	multiFunction -= Addition;   // Eliminate the pointer to the method Addition
      
        multiFunction(3.1, 4.5)  // It will call the Methods Multiply and Subtraction 
      
    }
}


// ANONYMOUS FUNCTIONS:

public class Program
{
    // Delegate
    public delegate double MathOperation(double x, double y);

    // Main
    static void Main(string[] args)
    {	
        // Anonymous function:
        MathOperation myFunction = delegate(double x, double y) { return x + y; };
      
        // You can also pass an anonymous function to methods:
      	Display(myFunction);
    }
  
  	static void Display(MathOperation myFoo)
    {
    	Console.WriteLine("The math gives: " + myFoo(2.8, 1.5));
      
    }

}
 

// LAMBDA:

public class Program
{
    // Delegate
    public delegate double MathOperation(double x, double y);

    // Main
    static void Main(string[] args)
    {	
        // Lambda function:
        MathOperation myFunction = (double x, double y) => { return x + y; };
        // OR
      	MathOperation myFunction2 = (x,y) => x * y;
    }
}