Lambda表达式详解
发布日期:2025-04-04 00:54:44 浏览次数:8 分类:精选文章

本文共 3696 字,大约阅读时间需要 12 分钟。

Lambda运算符简介及其在C#中的应用

Lambda运算符在编程中是一个强大的工具,尤其是在C#中,lambda表达式让代码更加简洁且高效。它通过一种简洁的语法方式,使开发者能够轻松定义小的操作流程。

Lambda表达式的基本概念

Lambda运算符在C#中被称为“=>”符号,通常被称为“转化”符号。它将表达式分为两个部分:左边指定输入参数,右边是lambda的主体。通过这种方式,你可以定义一个小型的函数,直接在代码中使用。

单参数和多参数的lambda表达式

  • 单参数param => expr

    这种形式中,左边指定了一个变量名param,右边是你要执行的操作。例如:

    var result = myData => myData.Age > 6 ? "Adult" : "Minor";
  • 多参数(param-list) => expr

    这种形式允许你在左边指定多个参数。参数列表可以加上逗号分隔。例如:

    var result = (p, z) => z - (p + 10);
  • 此外,右边的表达式可以是任意的简单操作,如条件判断、计算或调用另一个函数。

    Lambda表达式的应用实例

    让我们通过一个实际例子来理解lambda表达式的应用。以下是一个C#类的简单示例:

    namespace lambdaSample
    {
    public class Person
    {
    public string Name { get; set; }
    public int Age { get; set; }
    }
    class Program
    {
    static List
    PersonsList()
    {
    List
    persons = new List
    ();
    for (int i = 0; i < 7; i++)
    {
    Person p = new Person()
    { Name = i + "儿子", Age = 8 - i };
    persons.Add(p);
    }
    return persons;
    }
    static void Main(string[] args)
    {
    List
    persons = PersonsList();
    //筛选Age大于6的Person
    persons = persons.Where(p => p.Age > 6).ToList();
    //查找Age为1的单个Person
    Person per = persons.SingleOrDefault(p => p.Age == 1);
    //筛选Name中包含"儿子"的Person
    persons = persons.Where(p => p.Name.Contains("儿子")).ToList();
    }
    }
    }

    在这个示例中,WhereSingleOrDefault等方法使用了lambda表达式来定义筛选和查找操作,代码变得更加简洁且易于理解。

    Lambda表达式与委托

    委托是一种在C#中执行长远操作的机制,而lambda表达式则是定义委托的简洁方式。以下是使用lambda表达式定义委托的示例:

    // 示例1:单参数
    delegate int MyDelegate(int a);
    static void Main(string[] args)
    {
    MyDelegate myDelegate = p => p + 10;
    Console.WriteLine(myDelegate(10)); // 输出20
    }
    // 示例2:多参数和复杂主体
    delegate int MyDelegate(int a, int b);
    static void Main(string[] args)
    {
    MyDelegate myDelegate = (p, z) =>
    {
    if (p < 10)
    {
    return 100;
    }
    else
    {
    return z - p - 10;
    }
    };
    Console.WriteLine(myDelegate(10, 100)); // 输出80
    }

    通过lambda表达式,你可以灵活地定义委托的行为,使代码更加简洁。

    Func泛型委托

    Func

    委托是一个非常灵活的泛型委托类型,它允许你创建接收任意数量参数并返回一个值的函数。以下是Func的使用示例:

    // 示例1: Func
    Func
    func = p => $"{p} + 10--返回类型为string";
    Console.WriteLine(func(10)); // 输出“20--返回类型为string”
    // 示例2: Func
    Func
    func = (p, j) =>
    {
    if (p + j == 10)
    {
    return true;
    }
    return false;
    };
    Console.WriteLine(func(5,5)); // 输出“True”

    通过Func委托,你可以创建接受多个参数并返回一个结果的高效函数。

    使用表达式树动态创建lambda表达式

    除了手动定义lambda表达式,你还可以通过Microsoft烯宏(Roslyn)提供的API来动态创建lambda表达式。以下是一个示例:

    using System;
    using Microsoft Blockly;
    using System.Linq;
    static void Main(string[] args)
    {
    // 创建参数表达式树
    ParameterExpression a = Expression.Parameter(typeof(int), "i");
    ParameterExpression b = Expression.Parameter(typeof(int), "j");
    ParameterExpression c = Expression.Parameter(typeof(int), "w");
    ParameterExpression d = Expression.Parameter(typeof(int), "x");
    // 创建算术表达式树
    BinaryExpression be = Expression.Multiply(a, b); // i * j
    BinaryExpression be1 = Expression.Multiply(c, d); // w * x
    BinaryExpression su = Expression.Add(be, be1); // (i * j) + (w * x)
    // 创建lambda表达式
    Expression
    > lambda
    = Expression.Lambda(su, a, b, c, d);
    // 编译lambda为委托并执行
    Func
    f = lambda.Compile();
    Console.WriteLine(f(1, 1, 1, 1)); // 输出2
    }

    通过这种方式,你可以在运行时动态地定义和执行lambda表达式,解决代码生成和反射方面的问题。

    总结

    Lambda运算符是一种强大的工具,在C#中,它使代码更加简洁和高效。通过委托和Func泛型,你可以灵活地定义函数行为。而通过表达式树和Roslyn API,你可以动态地创建和执行lambda表达式。希望这些示例能够帮助你更好地理解lambda运算符的魅力!

    上一篇:Lammp安装过程
    下一篇:Lambda表达式入门,看这篇就够了!

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月10日 14时24分39秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章