One such lambda expression

having a class below..

public class Individual
{
     public string FirstName { get; set; }
     public decimal pocketmoney { get; set; }
}

 

we have

            List<Individual> myfiends = new List<Individual>() {
    new Individual {FirstName = "john", pocketmoney = 555M},
    new Individual {FirstName = "rama", pocketmoney = 65M},
    new Individual {FirstName = "king", pocketmoney = 77M}
            };

Create an extension method as below...

namespace mynamespace
{
    public static class MyExtensionMethods
    {
        public static IEnumerable<Individual> Filter(this IEnumerable<Individual> inds,
        Func<Individual, bool> selectorParam)
        {
            foreach (Individual ind in inds)
            {
                if (selectorParam(ind))
                {
                    yield return ind;
                }
            }
        }
    }
}
        

now both following codes work the same way

Func<Individual, bool> richnessFilter = delegate(Individual boy){ return boy.pocketmoney > 300; };
IEnumerable<Individual> myrichfiriends = myfiends.Filter(richnessFilter);


Func<Individual, bool> veryrichnessFilter = ind => ind.pocketmoney > 400;
IEnumerable<Individual> myveryRichFriends = myfiends.Filter(veryrichnessFilter);

 

 

The Filter method needs a pointer to a method "that filters relavant condition"

following two lines serve same purpose

  • delegate(Individual boy){ return boy.pocketmoney > 300; };
  • ind => ind.pocketmoney > 400;

they support the extension method(that needs a pointer to such function).

tehy are consumed by

  • IEnumerable<Individual> myrichfiriends = myfiends.Filter(richnessFilter);
  •  IEnumerable<Individual> myveryRichFriends = myfiends.Filter(veryrichnessFilter);