码迷,mamicode.com
首页 > 其他好文 > 详细

lambda 表达式

时间:2016-01-09 09:46:12      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

英标:[‘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

 

lambda 表达式

标签:

原文地址:http://www.cnblogs.com/lystory/p/5115471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!