Lambda 表达式

一、基本简介

1、 Lambda表达式主要用来创建匿名函数,使用=>来将参数函数体分开。用来简化一些简单函数的使用,再结合委托即可以使C#代码更加简洁。

2、 Lambda表达式主要有两种形式,分别为:

  • 表达式为主体的,表达式Lambda,形如: (param) => expression
  • 语句块为主体的,语句Lambda,形如:(param) => { expression1; expression2; .... }

3、表达式Lambda的主体只能为一个表达式,它会返回表达式的结果,且不可以有多条语句;而语句Lambda的主体可以有多条语句,但一般语句过多的主体不会使用Lambda表达式,而直接使用函数。
4、任何 Lambda 表达式都可以转换为委托类型。其中无返回值的常用于Action委托,有返回值的常用于Func委托。结合Lambda表达式,委托的使用会更加简洁、方便

int temp1 = 10;
string str = "Just Test!";

/*********转化为Action委托的Lambda***********/
//带一个参数的Action委托,使用语句块为主体,可包含多条语句
Action<int> ac01 = new Action<int>((num01) =>
  {
      str += " Thanks";
      ChangeNum(num01);
  });
ac01(20); //调用该委托

//无形参的Action委托,使用语句块为主体
Action ac02 = () => { ShowContent(); };
ac02();

//无形参的Action委托,使用表达式为主体
Action ac03 = () => ShowContent();
ac03();


/*********转化为Func委托的Lambda***********/
//Func委托,当形参只有一个时,形参的括号可有可无
Func<int,int> f01 = x1 =>  x1 + 100; // 只有一条语句,此时编译器会自动添加 return,以返回结果

Func<int, string> f02 = new Func<int, string>(x2 => "hello this is f02");

//Lambda表达式主体有多条语句,必须要显式使用大括号{}和 return 来返回结果,
Func<int, int, string> f03 = new Func<int, int, string>((int n1, int n2) =>
    {
        n1 *= 10;
        n2 += n1;
        return (n1 + n2).ToString();
    });



private void ChangeNum(int num)
{
    temp1 *= 10;
    label02.Content = temp1 + num;
}

private void ShowContent()
{
    str += " $$$****";
    label03.Content = str;
}

二、 Lambda表达式用于AsyncAwait 的异步编程

点击按钮触发事件,延迟1秒再触发事件。传统的方式:

public LambdaTest()
{
    InitializeComponent();
    Btn01.Click += OnBtnClicked;
}

private async void OnBtnClicked(object sender, RoutedEventArgs e)
{
    await JustWait();
    label04.Content = "Btn01 have been clicked.";
}

private async Task JustWait()
{
    await Task.Delay(1000);
}

使用Lambda表达式需要在参数列表前加async关键字,简化后的方式如下:

public LambdaTest()
{
    InitializeComponent();

    Btn01.Click += async (sender, e) =>
    {
        await JustWait();
        label04.Content = "show in Label";
    };
}

private async Task JustWait()
{
    await Task.Delay(1000);
}

【注:若不需要异步处理,则可以直接将asyncawait关键字去掉即可】


参考资料:
[1] Lambda 表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值