• C# 匿名方法、Lambda、Linq概念及联系


    栏目总目录


    匿名方法、Lambda表达式与LINQ

    匿名方法

    概念
    匿名方法是没有名称的方法实现,通常与委托关联使用。它提供了一种在不创建独立命名方法的情况下编写代码块的方式。

    语法

    delegate void MyDelegate(string message);
    
    MyDelegate del = delegate(string msg) {
        Console.WriteLine(msg);
    };
    
    del("Hello from anonymous method!");
    

    特点

    • 必须明确指定参数类型(除非使用var关键字,但var在这里不适用于委托类型)。
    • 适用于简单的委托调用,但代码较为冗长。
    Lambda表达式

    概念
    Lambda表达式提供了一种更简洁的方式来编写匿名方法。它从C# 3.0开始引入。

    语法

    // 推断参数类型
    Action<string> lambdaImplicit = msg => Console.WriteLine(msg);
    
    // 明确参数类型
    Action<string> lambdaExplicit = (string msg) => Console.WriteLine(msg);
    
    lambdaImplicit("Hello from lambda expression (implicit type)!");
    lambdaExplicit("Hello from lambda expression (explicit type)!");
    

    特点

    • 允许推断参数类型,使代码更简洁。
    • 可以是单个表达式或语句块。
    • 通常比匿名方法更简洁易读。
    LINQ

    概念
    LINQ(Language Integrated Query)是一种强大的查询功能,允许以声明性方式查询和操作各种数据源(如数组、集合、XML、数据库等)。

    语法示例(使用Lambda表达式):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    class Program
    {
        static void Main()
        {
            List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
            // 使用LINQ和Lambda表达式查询偶数
            var evenNumbers = numbers.Where(n => n % 2 == 0)
                                     .OrderBy(n => n)
                                     .Select(n => n * 2)
                                     .ToList();
    
            // 打印结果
            evenNumbers.ForEach(n => Console.WriteLine(n));
    
            // 另一个LINQ示例:分组和聚合
            var groupedNumbers = numbers.GroupBy(n => n % 3)
                                        .Select(group => new { Key = group.Key, Count = group.Count() })
                                        .ToList();
    
            groupedNumbers.ForEach(group => Console.WriteLine($"Key: {group.Key}, Count: {group.Count}"));
        }
    }
    

    LINQ与Lambda表达式的结合
    在上述示例中,LINQ查询与Lambda表达式紧密结合,用于筛选(Where)、排序(OrderBy)、转换(Select)和分组(GroupBy)数据。Lambda表达式作为参数传递给LINQ方法,提供了灵活且强大的查询能力。

    三者之间的区别
    • 匿名方法:必须明确指定参数类型(或使用var,但不适用于委托),代码较为冗长。
    • Lambda表达式:允许参数类型推断,支持单个表达式或语句块,代码更简洁。
    • LINQ:一种查询功能,允许使用Lambda表达式(或其他方式)以声明性方式查询和操作数据源。LINQ本身不是语言特性,而是一组扩展方法,可以与Lambda表达式等结合使用,实现复杂的查询逻辑。

    关于linq的具体用法参考另一篇文章:Linq用法

  • 相关阅读:
    SpringMVC核心流程分析(源码讲解)
    微服务入门:elasticsearch与RestClient(1)
    java基于微信小程序的社区疫情防控系统 uniapp 小程序
    【开源】JAVA+Vue.js实现农家乐订餐系统
    ES_深度分页概念与解决方案
    java编译时指定classpath
    git入门与基本
    典型数据结构-栈/队列/链表、哈希查找、二叉树(BT)、线索二叉树、二叉排序树(BST树)、平衡二叉树(AVL树)、红黑树(RB树)
    我的创作纪念日——纪念写博客128天
    页面跳转之转发和重定向+Servlet中文乱码问题
  • 原文地址:https://blog.csdn.net/m0_46396765/article/details/140342672