C#Lambda表达式使用

Lambda表达式是一个匿名函数,使用=>运算符定义。=>运算符左侧是输入参数,右侧是lambda主体。

语法:

member => expression;

member:输入参数,可以是0个或多个。

expression:有效的表达式。

1、lambda表达式基本用法

下面methodlambdaMethod拥有相同的效果,lambdaMethodmethod的简写版。

method();
lambdaMethod();

void method()
{
    Console.WriteLine("hello world");
}

void lambdaMethod() => Console.WriteLine("hello lambda");

//输出:
//hello world
//hello lambda
2、lambda表达式的输入参数
  1. 零个参数无返回值

    Action printHello = () => Console.WriteLine("hello world");
    printHello();
    //输出:hello world
    
  2. 一个参数无返回值,一个参数时可以省略括号

    Action<string> printName = it => Console.WriteLine($"我的名字叫:{it}");
    printName("张三");
    //输出:我的名字叫:张三
    
  3. 零个参数有返回值

    Func<DateTime> date = () => DateTime.Now.Date;
    var year = date().Year;
    Console.WriteLine($"今年是{year}年");
    //输出:今年是2023年
    
  4. 一个参数有返回值

    int num = 12;
    Func<int, int> square = x => x * x;
    var result = square(num);
    Console.WriteLine($"{num}的二次方是:{result}");
    //输出:12的二次方是:144
    
  5. 两个以上参数有返回值

    Func<int, int, bool> myCompare = (x, y) => x == y;
    if (myCompare(1, 2))
    {
        Console.WriteLine("相等");
    }
    else
    {
        Console.WriteLine("不相等");
    }
    //输出:不相等
    
  6. 使用弃元指定 lambda 表达式中不使用的参数

    Func<int, int, bool> test = (_, _) => true;
    Console.WriteLine(test(1,2));
    //输出:true
    
3、在LINQ中使用lambda表达式
string[] cities = { "成都", "重庆", "上海", "武汉" };
var chengdu = cities.SingleOrDefault(it => it.StartsWith("成"));
Console.WriteLine(chengdu);

lambda表达式输入参数是强类型,上面的例子中编译器可以自动推断出 it 的类型。如果编译器不能推断出类型我们则需要手动输入参数类型。像下面这样:

string[] cities = { "成都", "重庆", "上海", "武汉" };
var chengdu = cities.SingleOrDefault( (string it) => it.StartsWith("成"));
Console.WriteLine(chengdu);
4、lambda表达式转换为委托类型

任何 lambda 表达式都可以转换为委托类型。

  • 转换为Action委托类型:

    一个参数没有返回值的可转换为:Action<T>委托。

  • 转换为Func委托类型:

    一个参数有返回值的可转换为:Func<T,TResult>委托。

var lambdaClass = new LambdaClass();

lambdaClass.Ad("hello");    //调用委托
var length = lambdaClass.Fd("hello world"); //调用委托
Console.WriteLine(length);

public class LambdaClass
{
    //Action<string>委托
    public delegate void actionDelegate(string str);
    //Func<string, int>委托
    public delegate int funcDelegate(string str);

    //Action<string>委托对象
    public actionDelegate Ad = x => Console.WriteLine($"输入的参数为 {x}");
    //Func<string, int>委托对象
    public funcDelegate Fd = str => str.Length;
}

//输出:
//输入的参数为 hello
//11

该文章亦发表在个人网站,欢迎访问收藏:
网站链接:www.bitsof.cn
本文链接:C#Lambda表达式使用 - BitsOf

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值