zoukankan      html  css  js  c++  java
  • Lambda与委托

      Lambda 表达式是一个可用于创建委托表达式树类型的匿名函数

      通过使用 lambda 表达式,可以可作为参数 或 返回为函数调用值的本地函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。 

      若要创建 Lambda 表达式,必须在 Lambda 运算符 =>(读作goes to)   左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块

      例如,

    lambda 表达式 x => x * x

      指定名为 x 的参数并返回 x 的平方。

      您可以按照以下示例将此表达式分配给委托类型:

    namespace Lambda 
    {     
        class Program     
        {
             delegate int del(int intput);
             static void Main(string[] args)
             {
                 del myDelegate = x => (x * x);
                 Console.WriteLine(myDelegate(8));//64
             }
         } 
    }

      Lambda 表达式

     

      表达式在右边的 Lambda 表达式称为“Lambda 表达式”。 Lambda 表达式返回表达式的结果,并采用以下基本形式:

        (input parameters) => expression 

      :只有在 Lambda 有一个输入参数时,括号才是可选的;否则括号是必需的。

      两个或更多输入参数由括在括号中的逗号分隔:

        (x, y) => x == y

      有时,编译器难于或无法推断输入类型。如果出现这种情况,您可以按以下示例中所示方式显式指定类型:

        (int x, string s) => s.Length > x

      使用空括号指定零个输入参数:

        () => SomeMethod()

     

      Lambda 语句 

      Lambda 语句与 Lambda 表达式类似,只是语句括在大括号中:

        (input parameters) => {statement;} 

    class Program
         {
             delegate void TestDelegate(string s);
             static void Main(string[] args)
             {
                 TestDelegate myDel = n =>
                 {
                     string s = n + "....";
                     Console.WriteLine(s);
                 };
                 myDel("Ca!");
             }
         }

     

    1. 完整的委托 

    namespace Lambda
     {
         class Program
         {
             delegate string Del(string name);
    
            static string sayHi(string name)
             {
                 return "Hi " + name;
             }
             static void Main(string[] args)
             {
                 Del say = new Del(sayHi);
                 Console.WriteLine(sayHi("完整委托"));
             }
         }
     }

     

    2.升级版本--匿名方法

    namespace Lambda
     {
         class Program
         {
             delegate string Del(string name);
             static void Main(string[] args)
             {
                 Del sayHi = delegate(string name) { return "Hi " + name; };
                 Console.WriteLine(sayHi("匿名方法")); 
            }
         }
     }

     3.升级版本Lambda表达式

    namespace Lambda
     {
         class Program
         {
             delegate string Del(string name);
             static void Main(string[] args)
             {
                 Del sayHi = name => { return "Hi " + name; };
    Console.WriteLine(sayHi("Lambda表达式")); } } }

     

    4.委托替代--Func 委托 有参数有返回值

    namespace Lambda
     {
         class Program
         {
            static void Main(string[] args)
             {
                 Func<string, string> sayHi = delegate(string name) { return "Hi " + name; };
                 Func<string, string> SayHi = name => { return "Hi " + name; };
                 Console.WriteLine(sayHi(" Func<string, string>匿名委托"));
                 Console.WriteLine(SayHi(" Func<string, string>Lambda委托"));
             }
         }
     }

    5.委托替代--Action 委托 有参数无返回值

    namespace Lambda
     {
         class Program
         {
            static void Main(string[] args)
             {
                 Action<string> sayHi = delegate(string name)
                 {
                     Console.WriteLine("Hi " + name);
                 };
                 Action<string> SayHi = name => Console.WriteLine("Hi " + name);
                 sayHi("Action<string> sayHi匿名委托");
                 SayHi("Action<string> SayHi Lambda委托");
             }
         }
     }
    
     

    参考:

      写给那些看不懂委托的同学

      用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

  • 相关阅读:
    Jenkins + GitLab 通过 Webhook 自动触发构建爬坑记录
    Spring Cloud Eureka 学习记录
    [源码分析]ArrayList
    一个简单的统计问题(解决方案:Trie树)
    Redis基本数据类型命令汇总
    Redis的Pub/Sub客户端实现
    从ByteBuffer中解析整数
    学习T-io框架,从写一个Redis客户端开始
    折腾一下WebSocket的ArrayBuffer传输方式
    Ubuntu安装docker笔记
  • 原文地址:https://www.cnblogs.com/Jolinson/p/3469243.html
Copyright © 2011-2022 走看看