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