zoukankan      html  css  js  c++  java
  • C#基础知识---Lambda表达式

    一、Lambda表达式简介

    Lambda表达式可以理解为匿名函数,可以包含表达式和语句。它提供了一种便利的形式来创建委托。

    Lambda表达式使用这个运算符--- “=>”,它读成“goes to” ,该运算符的左边为输入参数,右边是表达式或者语句块。

    二、例子

      例1:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Windows.Forms;
     7 
     8 namespace Lambda
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14 
    15             //下面是C# 1中创建委托实例的代码
    16             Func<string, int> del1 = new Func<string, int>(CallBackMethod);
    17 
    18             //C#2中用匿名方法来创建委托实例,CallBackMethod
    19             Func<string, int> del2 = delegate (string text)
    20             {
    21                 return text.Length;
    22             };
    23 
    24             //C# 3中使用Lambda表达式来创建委托实例
    25             Func<string, int> del3 = (string text) => text.Length;
    26                                  
    27             // 可以省略参数类型string,把上面代码再简化为:
    28             Func<string, int> del4 = (text) => text.Length;
    29                              
    30             // 如果Lambda表达式只需一个参数,并且那个参数可以隐式指定类型时,
    31             // 此时可以把圆括号也省略,简化为:
    32             Func<string, int> del5 = text => text.Length;
    33 
    34             int length = del5("Test");
    35             Console.WriteLine("Length:" + length);
    36 
    37             Console.ReadKey();
    38         }
    39 
    40         private static int CallBackMethod(string str)
    41         {
    42             return str.Length;
    43         }
    44     }
    45 }
    View Code

      例2: 

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Windows.Forms;
     7 
     8 namespace Lambda
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             Button button1 = new Button() { Text = "按钮1", Width = 50, Height = 50, Name = "button1" };
    15             button1.Left = 10;
    16             button1.BackColor = System.Drawing.Color.Red;
    17 
    18             Button button2 = new Button() { Text = "按钮二", Width = 50, Height = 50, Left = 70, Name = "button2" };
    19             button2.BackColor = System.Drawing.Color.Green;
    20 
    21             // C# 2中使用匿名方法来订阅事件
    22             button1.Click += delegate (object sender, EventArgs e)
    23             {
    24                 ReportEvent("Click事件", sender, e);
    25             };
    26 
    27 
    28             // C# 3Lambda表达式方式来订阅事件
    29             button2.Click += (sender, e) => ReportEvent("Click事件", sender, e);
    30 
    31 
    32             Form form = new Form { Name = "在控制台中创建的窗体", AutoSize = true };
    33 
    34             form.Controls.Add(button1);
    35             form.Controls.Add(button2);
    36             // 运行窗体
    37 
    38             string str = "";
    39             bool isShow = false;
    40             while (!isShow)
    41             {
    42                 str = Console.ReadLine();
    43                 switch (str)
    44                 {
    45                     case "show":
    46                         isShow = true;
    47                         Application.Run(form);
    48                         break;
    49                     case "quit":
    50                         Environment.Exit(0);
    51                         break;
    52 
    53                 }
    54             }
    55             Console.ReadKey();
    56         }
    57         // 记录事件的回调方法
    58         private static void ReportEvent(string title, object sender, EventArgs e)
    59         {
    60             Console.WriteLine("事件名称:{0}", title);
    61             Console.WriteLine("激发事件的对象:{0}", (sender as Button).Name);
    62             Console.WriteLine("事件参数类型: {0}", e.GetType());
    63             Console.WriteLine();
    64             Console.WriteLine();
    65         }
    66     }
    67 }
    View Code

      运行结果如下:

      

  • 相关阅读:
    java 读取src下的配置文件
    图书管理系统
    StaticDemo
    MatixDemo
    Magics
    GetPrime
    ConWithThis
    TestTHIS
    ConstructorOverLoad
    Sequence
  • 原文地址:https://www.cnblogs.com/3xiaolonglong/p/9674151.html
Copyright © 2011-2022 走看看