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用法

相关推荐

  1. C# 匿名方法、Lambda、Linq概念联系

    2024-07-16 23:10:03       24 阅读
  2. C# 中的匿名方法

    2024-07-16 23:10:03       31 阅读
  3. C# 匿名方法与扩展方法详解

    2024-07-16 23:10:03       33 阅读
  4. C++中匿名对象介绍使用场景详解

    2024-07-16 23:10:03       28 阅读
  5. git概念使用方式

    2024-07-16 23:10:03       40 阅读
  6. C# json 转匿名对象C#关键字的处理

    2024-07-16 23:10:03       58 阅读
  7. c#委托 匿名方法和lamada表达式演变过程代码演示

    2024-07-16 23:10:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 23:10:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 23:10:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 23:10:03       58 阅读
  4. Python语言-面向对象

    2024-07-16 23:10:03       69 阅读

热门阅读

  1. Mysql迁移达梦数据库-简介篇

    2024-07-16 23:10:03       18 阅读
  2. ASF平台

    ASF平台

    2024-07-16 23:10:03      20 阅读
  3. 构造器/构造方法

    2024-07-16 23:10:03       19 阅读
  4. 数据模型-NoSQL数据模型深入理解

    2024-07-16 23:10:03       20 阅读
  5. TCP网络模型

    2024-07-16 23:10:03       20 阅读
  6. 使用mediapip 检测pose 并作为一个服务

    2024-07-16 23:10:03       23 阅读