C#中的匿名函数、lambda表达式解读

C#中的匿名函数、lambda表达式解读

在C#中,匿名函数和lambda表达式提供了更强大、更简洁的代码实现方式,这两个概念通常都是一起出现的。

匿名函数

匿名函数就是没有名字的函数,在C#中可以使用delegate来定义。匿名函数主要有以下两种形式:

delegate (parameters) { statements }
delegate { statements }

第一种形式的匿名函数,可以像普通函数一样传递参数和返回值。例如:

Action<int> printInt = delegate (int a) { Console.WriteLine(a); };
printInt(3); // 输出 3

第二种形式的匿名函数不需要传递参数和返回值。例如:

Action greet = delegate { Console.WriteLine("Hello"); };
greet(); // 输出 Hello

Lambda表达式

Lambda表达式是一种精简版的匿名函数,通常是以=>符号分割的参数列表和执行代码体组成。

(parameters) => expression
(parameters) => { statements }

Lambda表达式同样支持传递参数和返回值。例如:

Action<int> printInt = a => Console.WriteLine(a);
printInt(3); // 输出 3
Func<int, int> square = x => x * x;
Console.WriteLine(square(3)); // 输出 9

Lambda表达式也可以在LINQ查询语句中使用,实现快速筛选和排序等操作。例如:

var nums = new List<int> { 3, 6, 1, 8, 2 };
var sortedNums = nums.OrderBy(x => x);
Console.WriteLine(string.Join(", ", sortedNums)); // 输出 1, 2, 3, 6, 8

Lambda表达式还可以与委托、事件等高级概念相结合,进一步提升C#编程效率和代码可读性。

示例说明

示例1:按照姓氏首字母排序

例如有一个Person类:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

现在需要按照每个人的姓氏首字母进行升序排序。可以使用LINQ和Lambda表达式来实现:

var people = new List<Person>
{
    new Person("Tom Smith", 27),
    new Person("Alice Johnson", 31),
    new Person("Bob Wilson", 22),
    new Person("John Doe", 35)
};

var sortedPeople = people.OrderBy(p => p.Name.Split()[1][0]);

foreach (var person in sortedPeople)
{
    Console.WriteLine(person.Name);
}

只需要一行代码就可以实现排序功能。使用OrderBy方法和Lambda表达式,将每个Person的Name属性拆成两个部分:FirstName和LastName。通过姓氏的首字母进行升序排列。

示例2:计算数组中奇数的数量

例如有一个整数数组:

var nums = new[] { 3, 6, 1, 8, 2 };

现在需要计算这个数组中奇数的数量。可以使用Lambda表达式和Count方法来实现:

var oddCount = nums.Count(n => n % 2 != 0);
Console.WriteLine("Odd count: " + oddCount);

只需要一行代码就可以完成计算功能。使用Count方法和Lambda表达式,筛选出数组中为奇数的元素,并统计数量。

以上两个示例展示了匿名函数和Lambda表达式的一些基本应用方式,并且与其他C#高级概念结合实现了不同的功能。通过这些示例,可以更好地理解这两个概念的使用方法和实现原理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中的匿名函数、lambda表达式解读 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Unity实现移动物体到鼠标点击位置

    为了实现将物体移动到鼠标点击位置,我们需要用到Unity中的以下两个组件:Input和Transform。 Input组件用于检测用户的鼠标点击事件,而Transform组件则用于移动物体。 首先,在Unity的场景中创建一个3D物体,然后将它的Transform组件设置为可编辑。 然后,在物体的脚本中添加以下代码,用于检测鼠标点击事件,并将物体移动到鼠标所…

    C# 2023年6月3日
    00
  • C# 用什么方法将BitConverter.ToString产生字符串再转换回去

    要将BitConverter.ToString产生的字符串再转换回为二进制数据,可以使用以下两种方法: 1. 使用BitConverter.GetBytes和Convert.FromHexString 可以使用BitConverter.GetBytes将一个十六进制字符串转换为等效的字节数组,然后使用Convert.FromHexString将该数组转换为二…

    C# 2023年6月7日
    00
  • ASP.NET Core使用Swagger/OpenAPI规范

    ASP.NET Core使用Swagger/OpenAPI规范 Swagger/OpenAPI是一种用于描述RESTful API的规范,它可以帮助开发人员更好地理解和使用API。在本攻略中,我们将讨论如何在ASP.NET Core应用程序中使用Swagger/OpenAPI规范,并提供两个示例说明。 步骤一:安装Swashbuckle.AspNetCore…

    C# 2023年5月17日
    00
  • asp.net 2.0里也可以用JSON的使用方法

    ASP.NET 2.0是一个非常流行的.NET开发框架,它可以与JSON(JavaScript Object Notation)结合使用以进行数据交换。下面是使用JSON的方法的完整攻略: 1. 引入JavaScriptSerializer .NET Framework 2.0引入了JavaScriptSerializer类,可以使用它来序列化和反序列化.N…

    C# 2023年5月31日
    00
  • C# Linq的Count()方法 – 返回序列中的元素数

    当我们在使用C#Linq对集合进行操作时,Count()是一条非常常见的语句。它能够返回集合中元素的数量。在使用Count()时,需要注意它的返回值为int类型。 使用语法如下: collection.Count() 其中,collection代表一个集合,可以是数组、List、Dictionary、IEnumerable等。下面就将利用两个示例来讲解Cou…

    C# 2023年4月19日
    00
  • 详解datagrid使用方法(重要)

    详解datagrid使用方法(重要) 什么是datagrid? datagrid是一种网格组件,可以在Web应用程序中展示和编辑数据。它以类似于表格的形式,将数据呈现给用户,通常用于显示大量数据的情况,比如数据报表、数据分析等。 如何使用datagrid? 在使用datagrid之前,需要引入datagrid的库文件。目前较为常用的有jQuery EasyU…

    C# 2023年6月1日
    00
  • c#异步发送邮件的类

    C#中异步发送邮件的类可以使用SmtpClient类和MailMessage类来实现。下面是详细的攻略: 步骤一:引入命名空间 首先需要在代码文件中引入以下命名空间: using System.Net; using System.Net.Mail; 步骤二:创建邮件消息 接下来,需要创建MailMessage对象并设置发送邮件的主题、内容和发送地址等信息: …

    C# 2023年6月7日
    00
  • 详解c# 事件总线

    详解C#事件总线攻略 事件总线是一种让不同对象之间相互通信的方式。它可以让多个对象在程序运行时相互协作,轻松实现松耦合(loose coupling)和高内聚(high cohesion)的编程状态。 事件总线的基础知识 事件总线是一个对象,它处理应用程序中的所有事件,并将它们发送给已经订阅这些事件的对象。这些对象被称为“事件订阅者”。 事件总线的实现方式 …

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部