标签:
英标:[‘læmd?],汉语音:蓝达
Lambda 是用来创建匿名函数
Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。
一、委托中使用 Lambda
delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); }
Lambda 使用 => 运算符来表达。
左右是参数,右边是语句块
二、表达式目录树中使用 Lambda
static void Main(string[] args) { Expression<del> myET = x => x * x; }
表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。表达式 lambda 广泛用于表达式树(C# 和 Visual Basic)的构造。表达式 lambda 会返回表达式的结果,并采用以下基本形式:
(input parameters) => expression
多个参数的时候必须把左边用括号包起来,多个参数用“,”隔开:
(x, y) => x == y
你也可以显示的指定参数类型。
(int x, string s) => s.Length > x
如果没有左边不带入参数,那就使用一个空括号。
() => SomeMethod()
示例:
delegate void how(string name, int age); static void Main(string[] args) { how i = (string n, int a) => { Console.WriteLine("小朋友年龄是:{0},名字是:{1}", a, n); }; i(Console.ReadLine(), int.Parse(Console.ReadLine())); // i("王小小", 1111); }
当参数类型为 Expression<Func> 时,你也可以提供 Lambda 表达式,例如在 System.Linq.Queryable 内定义的标准查询运算符中。如果指定 Expression<Func> 参数,lambda 将编译为表达式目录树。
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; int oddNumbers = numbers.Count(n => n % 2 == 1);
customers.Where(c => c.City == "London");
var firstNumbersLessThan6 = numbers.TakeWhile(n => n < 6);
Lambda 的一般规则如下:
Lambda 包含的参数数量必须与委托类型包含的参数数量相同。
Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。
Lambda 的返回值(如果有)必须能够隐式转换为委托的返回类型。
综合使用:
delegate bool D(); delegate bool D2(int i); D del; D2 del2; public void TestMethod(int input) { int j = 0; ///引用外部变量 del = () => { j = 10; return j > input; }; ///混合使用内部,和外部 del2 = (x) => { return x == j; }; Console.WriteLine("j = {0}", j); bool boolResult = del(); Console.WriteLine("j = {0}. b = {1}", j, boolResult); }
参考文档:
https://msdn.microsoft.com/zh-cn/library/bb397687.aspx
标签:
原文地址:http://www.cnblogs.com/lystory/p/5115471.html