Lambda Expressions C# 3.0 & Anonymous Methods

Lambda expressions provide a concise syntax for writing anonymous
methods. The C# 3.0 specification describes lambda expressions as a
super set of anonymous methods.


In C# 2.0, you can write a delegate using an anonymous method, as
shown in this example:

public delegate int MyDelegate(int n);

class MyClass
{
    static void Main()
    {
        // Anonymous method that returns the argument multiplied by 5:
        MyDelegate delegObject1 = new MyDelegate(
        delegate(int n) { return n * 5; }
        );
        // Display the result:
        Console.WriteLine("The value is: {0}", delegObject1(5));
    }
}

This program outputs the value 25.

Using a lambda expression you can use a simpler syntax to achieve the
same goal:

MyDelegate delegObject2 = (int n) => n * 5;

using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.Xml.XLinq;
using System.Data.DLinq;

namespace Lambda
{
    public delegate int MyDelegate(int n);
    class MyClass
    {
        static void Main()
        {
            MyDelegate delegObject1 = new MyDelegate(
            delegate(int n) { return n * 5; }
            );

            Console.WriteLine("The value using an anonymous method is: {0}",
            delegObject1(5));

            MyDelegate delegObject2 = (int n) => n * 5;
            
            Console.WriteLine("The value using a lambda expression is: {0}",
            delegObject2(5));

            Console.ReadLine();
        }
    }
}

Output:
The value using an anonymous method is: 25
The value using a lambda expression is: 25


A lambda expression can use two arguments, especially when you are
using the Standard Query Operators. Let us start by declaring the following
delegate that uses two arguments:

public delegate int MyDelegate(int m, int n);

You can instantiate the delegate by using a lambda expression like this:

MyDelegate myDelegate = (x, y) => x * y;

You can then invoke the delegate and display the result as follows:

Console.WriteLine("The product is: {0}", myDelegate(5, 4));
// output: 20