Lambda 表达式 之个人见解...粗解

Lambda 表达式用于更简洁的方法来写匿名表达式:

1. 在list<t>中的.FindAll() 方法中可以 陈述为 “是” : 以lambda后面的判断条件所返回的bool值 isEven来确定是否是为所需的item(偶数2)

1             List<int> evenNumbers = list.FindAll((i) =>
2             {
3                 Console.WriteLine("value of i is currently: {0}", i);
4                 bool isEven = ((i % 2) == 0);
5                 return isEven;
6             });

 

一般简单的用为 

1 List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);

 

2. Lambda表达式的参数可以是显式类型化,也可以是隐式类型化。 

       //显式类型化
            List<int> evenNumbers = list.FindAll((int i) => (i % 2) == 0);
            //隐式类型化
            List<int> evenNumbers = list.FindAll(i=>(i%2)==0);

3.Lambda表达式处理多个参数。

新建一个class.

public class SimpleMath
    {
        public delegate void MathMessage(string msg, int result);
        private MathMessage mmDelegate;

        public void SetMathHandler(MathMessage target)
        { mmDelegate = target; }

        public void Add(int x, int y)
        {
            if (mmDelegate != null)
                mmDelegate.Invoke("Adding has completed!", x + y);
        }
    }

下面使用lambda 表达式注册w/委托。

       SimpleMath m = new SimpleMath();
            m.SetMathHandler((msg, result) =>
            { Console.WriteLine("Message: {0}, Result: {1}", msg, result); });

首先隐式的传入参数 MathMessage(msg, result)

然后执行lambda表达式

       m.Add(10, 10);

输出结果:

Message: Adding has completed!, Result: 20

4. Lambda 表达式 定义匿名方法

新建一个Class

public class Car
    {
       ...
        // This delegate works in conjunction with the
        // Car's events.
        public delegate void CarEngineHandler(object sender, CarEventArgs e);

        // This car can send these events.
        public event CarEngineHandler Exploded;
        public event CarEngineHandler AboutToBlow;

        public void Accelerate(int delta)
        {
            // If the car is dead, fire Exploded event.
            if (carIsDead)
            {
                if (Exploded != null)
                    Exploded(this, new CarEventArgs("Sorry, this car is dead..."));
            }
            else
            {
                CurrentSpeed += delta;

                // Almost dead?
                if (10 == MaxSpeed - CurrentSpeed
                  && AboutToBlow != null)
                {
                    AboutToBlow(this, new CarEventArgs("Careful buddy!  Gonna blow!"));
                }

                // Still OK!
                if (CurrentSpeed >= MaxSpeed)
                    carIsDead = true;
                else
                    Console.WriteLine("CurrentSpeed = {0}", CurrentSpeed);
            }
        }
    }

 

public class CarEventArgs : EventArgs
    {
        public readonly string msg;
        public CarEventArgs(string message)
        {
            msg = message;
        }
    }

 

使用Lambda表达式语法 (非传统的委托语法)挂接从Car对象发送的每个事件

static void Main(string[] args)
        {
            Console.WriteLine("***** More Fun with Lambdas *****\n");

            // Make a car as usual.
            Car c1 = new Car("SlugBug", 100, 10);

            // Now with lambdas!
            c1.AboutToBlow += (sender, e) => { Console.WriteLine(e.msg); };
            c1.Exploded += (sender, e) => { Console.WriteLine(e.msg); };

            // Speed up (this will generate the events).
            Console.WriteLine("\n***** Speeding up *****");
            for (int i = 0; i < 6; i++)
                c1.Accelerate(20);

            Console.ReadLine();
        }

 

 

最后 lambda表达式可以简化为:

ArgumentsToProcess => StatementToProcessThem

转载于:https://www.cnblogs.com/jiton/archive/2013/04/09/3011284.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值