zoukankan      html  css  js  c++  java
  • lambda表达式

    lambda表达式

    参考

    [C# lambda表达式(简单易懂)]:

    [C# Lambda表达式学习笔记]

    lambda简介

    lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数

    ​ lambda表达式:

    ​ 1.一个参数:param=>expr

    ​ 2.多个参数:(x, y) => x == y

    ​ 3.显式指定类型:(int x, string s) => s.Length > x

    ​ 4.使用空括号指定零个输入参数:() => SomeMethod()

    示例1

    例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的值计算的。 如下面的示例所示,可以将此表达式传递给委托类型:

    delegate int del(int i);
    static void Main(string[] args)
    {
        del myDelegate = x => x * x;
        int j = myDelegate(5); //j = 25
    }      
    

    示例2 多参数

     //委托  逛超市
            delegate int GuangChaoshi(int a,int b);
            static void Main(string[] args)
            {            
                GuangChaoshi gwl = (p,z) => z-(p + 10);
                Console.WriteLine(gwl(10,100) + "");   //打印80,z对应参数b,p对应参数a
                Console.ReadKey();
            }
    

    示例2.1 lambda主体运算复杂

    /// <summary>
            /// 委托  逛超市
            /// </summary>
            /// <param name="a">花费</param>
            /// <param name="b">付钱</param>
            /// <returns>找零</returns>
            delegate int GuangChaoshi(int a,int b);
            static void Main(string[] args)
            {
                GuangChaoshi gwl = (p, z) =>
                {
                    int zuidixiaofei = 10;
                    if (p < zuidixiaofei)
                    {
                        return 100;
                    }
                    else
                    {
                        return z - p - 10;
                    }
               
                };
                Console.WriteLine(gwl(10,100) + "");   //打印80,z对应参数b,p对应参数a
                Console.ReadKey();
            }
    

    Func委托 使用表达式

    示例1

     Func<int, string> gwl = p => p + 10 + "--返回类型为string";            
                Console.WriteLine(gwl(10) + "");   //打印‘20--返回类型为string’,z对应参数b,p对应参数a
                Console.ReadKey();
    

    示例2

     static void Main(string[] args)
            {
                Func<int, int, bool> gwl = (p, j) =>
                    {
                        if (p + j == 10)
                        {
                            return true;
                        }
                        return false;
                    };
                Console.WriteLine(gwl(5,5) + "");   //打印‘True’,z对应参数b,p对应参数a
                Console.ReadKey();
            }
    

    说明:从这个例子,我们能看到,p为int类型,j为int类型,返回值为bool类型。

    示例3

    将委托实例化为 Func<int,bool> myFunc,其中 int 是输入参数,bool 是返回值。 始终在最后一个类型参数中指定返回值。 Func<int, string, bool> 定义包含两个输入参数(int 和 string)且返回类型为 bool 的委托。 在调用下面的 Func 委托时,该委托将返回 true 或 false 以指示输入参数是否等于 5:

    Func<int, bool> myFunc = x => x == 5;
    bool result = myFunc(4); // returns false of course
    

    示例4

    当参数类型为 Expression 时,您也可以提供 Lambda 表达式,例如在 System.Linq.Queryable 内定义的标准查询运算符中。 如果指定 Expression 参数,Lambda 将编译为表达式树。

    此处显示了一个标准查询运算符, Count 方法:

    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    int oddNumbers = numbers.Count(n => n % 2 == 1);
    

    lambda表达式树

    示例1

     /// <summary>
            /// 表达树
            /// </summary>
            public void ExpressioTest()
            {  
                //创建一个表达式树中的参数,作为一个节点
                Expression f = Expression.Constant(2);
                Expression s = Expression.Constant(3);
                Expression test = Expression.Add(f, s);
                Console.WriteLine(test);
            }
    
    

    示例2

    演示如何让 Visual C# 编译器创建一个表示 lambda 表达式 num => num < 5 (C#) 或 Function(num) num < 5 (Visual Basic) 的表达式树。

    Expression<Func<int, bool>> lambda = num => num < 5;
    

    示例3 编译表达式

    Expression< TDelegate> 类型提供 Compile 方法,该方法将表达式树表示的代码编译成一个可执行委托。

                // 创建表达式树
                Expression<Func<int, bool>> expr = num => num < 5;
                // 将表达式树编译为委托。
                Func<int, bool> result = expr.Compile();
                // 调用委托并将结果写入控制台。
                Console.WriteLine(result(4));
                // Prints True.
    
                //还可以使用简化的语法
                //编译并运行表达式树。.
                //下面的行可以替换前面的两个语句。
                Console.WriteLine(expr.Compile()(4));
                Console.ReadKey();
                // Also prints True.
    
  • 相关阅读:
    jQuery-1.样式篇---属性与样式
    jQuery-1.样式篇---选择器
    jQuery-1.样式篇
    随机数
    UIButton
    UILabel
    webView
    气泡聊天
    下拉和上拉刷新
    LimitDemo
  • 原文地址:https://www.cnblogs.com/ouyangkai/p/13883951.html
Copyright © 2011-2022 走看看