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.
    
  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/ouyangkai/p/13883951.html
Copyright © 2011-2022 走看看