一句话说明白lamda表达式

本文详细介绍了Lambda表达式的定义、作用以及如何在不同场景下应用Lambda表达式,包括其简化匿名方法书写的能力和在代理方法上的优势。通过实例演示了如何创建并调用Lambda表达式,并解释了其输出顺序的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lamda表达式
格式:
( 形参列表 ) => { 函数体 }

作用:简化匿名方法的书写,可用在任何可使用匿名方法和强类型代理的地方;

例子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lamda_expression
{
    class Program
    {
        public delegate string mydelegate( string s);

        static void Main( string [] args)
        {

            mydelegate d1;

            d1 = delegate( string myarg) { Console.WriteLine("anonymous method output: {0}", myarg);
            return "anonymous method done"; };

            d1 += (( string myarg) => { Console.WriteLine("lamda expression output: {0}", myarg);
            return "lamda ok"; });

            Console.WriteLine("d1 output: {0}", d1("arg"));

        }

    }

}


输出:

anonymous method output: arg

lamda expression output: arg

d1 output: lamda ok  


从上面的输出还可以看到,
d1代理了多个方法,只有调用序列中最后一个方法的返回值作为d1的返回值。
在C#中,Lambda表达式可以通过以下方式返回值: ### 1. **使用`Func`委托** - `Func`委托用于封装有返回值的方法。最后一个泛型参数指定返回类型。 - **示例**: ```csharp Func<int, int, int> add = (a, b) => a + b; // 返回两数之和 int result = add(3, 5); // result = 8 ``` ### 2. **直接返回表达式结果** - 如果Lambda体是单个表达式,编译器会自动将其作为返回值。 - **示例**: ```csharp Func<int, int> square = x => x * x; // 直接返回x的平方 int squared = square(4); // squared = 16 ``` ### 3. **使用代码块(`{}`)显式返回** - 当Lambda体包含多条语句时,需用`return`关键字显式返回值。 - **示例**: ```csharp Func<int, int, int> max = (a, b) => { if (a > b) return a; else return b; }; int larger = max(10, 20); // larger = 20 ``` ### 4. **与LINQ结合返回集合或对象** - 在LINQ查询中,Lambda常用于投影(返回新对象)或聚合操作。 - **示例**: ```csharp var numbers = new List<int> { 1, 2, 3 }; var doubled = numbers.Select(x => x * 2).ToList(); // 返回List<int> {2, 4, 6} ``` ### 5. **异步Lambda返回`Task<T>`** - 使用`async`修饰的Lambda可返回`Task<T>`,通过`await`获取结果。 - **示例**: ```csharp Func<Task<int>> getValueAsync = async () => { await Task.Delay(1000); return 42; // 返回Task<int>,结果为42 }; int value = getValueAsync().Result; // 同步等待结果(实际开发中建议用await) ``` ### 关键注意事项 1. **返回类型推断**:编译器会根据Lambda体自动推断返回类型(除非显式指定)。 2. **多返回值场景**:可通过返回元组(`ValueTuple`)或自定义类型实现。 ```csharp Func<int, (int square, int cube)> calculate = x => (x * x, x * x * x); var (square, cube) = calculate(3); // square=9, cube=27 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值