C#中的匿名函数、lambda表达式解读
作者:Danny_hi 时间:2023-08-28 07:07:39
C# 匿名函数、lambda表达式、Linq查询
一、匿名函数的使用
匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。
可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。
下面的示例演示了从 C# 1.0 到 C# 3.0 委托创建过程的发展:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test0630
{
delegate void TestDelegate(string s);
class Program
{
static void Main(string[] args)
{
// Original delegate syntax required
// initialization with a named method.
TestDelegate testDelA = new TestDelegate(M);
// C# 2.0: A delegate can be initialized with
// inline code, called an "anonymous method." This
// method takes a string as an input parameter.
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };
// C# 3.0. A delegate can be initialized with
// a lambda expression. The lambda also takes a string
// as an input parameter (x). The type of x is inferred by the compiler.
TestDelegate testDelC = (x) => { Console.WriteLine(x); };
// Invoke the delegates.
testDelA("Hello,this is TestA");
testDelB("Hello,this is TestB");
testDelC("Hello,this is TestC");
// Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
static void M(string s)
{
Console.WriteLine(s);
}
}
}
二、lambda表达式
lambda表达式是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量,是LINQ的基础。
lambda表达式格式:(参数列表)=>表达式或语句块 ,举例如下:
//无参
() => DoSomeThing() ;
//单参数
p => p.id > 0 ; //返回Bool
//多参数
( x , y ) => x * y ;
//带类型输入参数
( int x , int y ) => x * y;
下面介绍List集合中的Lambda表达式的运用:
(1) 查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001');
(2) 查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从小到大排列。
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001').OrderBy(t=>t.BirthDay);
在此说一下,OrderBy是从小到大排序,需要从大到小排列则用OrderByDescending。
(3) 查询班级编号为1001的班级下面的姓氏为【李】的同学的所有集合,并按照学生的出生日期从小到大排列。
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001'&&t.StudentName.StartWith(“李”)).OrderBy(t=>t.BirthDay);
(4) 查询出班级编号为1001的班级,并且存在至少一门考试科目成绩低于60分的所有同学。
var result = studentList.Where(t => (t.ClassCode == "1001") && (scoreList.Exists(p => p.ScoreValue < 60 && p.StudentCode == t.StudentCode)));
(5) 其他较常用的Lambda表达式如下:
var a = studentList.FirstOrDefault(t => t.StudentCode == "10012");//FirstOrDefault返回第一个符合条件的数据,不存在的时候返回Null。
var b = studentList.Count(t => t.StudentName == "李世民");//返回符合条件的实体个数
var c = studentList.FindAll(t => t.StudentName.Contains("中"));//查找所有名字中含有【中】的实体集合
var d = studentList.GroupBy(t => t.ClassCode);//对studentList按照ClassCode分组
var f = studentList.Max(t => t.BirthDay);//返回最大的出生日期。
var e = scoreList.Sum(t => t.ScoreValue);//对所有成绩求和
var g = scoreList.Average(t => t.ScoreValue);//对所有成绩求平均分
var h = studentList.Select(t => t.StudentName).Distinct();//获取所有的学生姓名,并去除重名
来源:https://blog.csdn.net/qq_43024228/article/details/107035662
标签:C#,匿名函数,lambda,表达式
0
投稿
猜你喜欢
C#接口(Interface)用法分析
2022-10-18 10:59:17
Unity Shader实现3D翻页效果
2021-10-07 10:03:45
C++构造函数初始化列表的实现详解
2022-05-21 09:54:10
Go Java算法之K个重复字符最长子串详解
2022-02-10 17:53:29
C#中ManualResetEvent用法总结
2023-01-21 23:41:41
SpringBoot2.0+阿里巴巴Sentinel动态限流实战(附源码)
2021-05-25 18:52:47
Java实现的断点续传功能的示例代码
2023-05-25 12:17:22
springboot2.3 整合mybatis-plus 高级功能及用法详解
2023-02-23 23:31:55
总结C#网络编程中对于Cookie的设定要点
2021-12-28 20:16:43
C#中的委托和事件详解
2022-01-20 01:31:53
android仿音悦台页面交互效果实例代码
2023-03-27 12:55:54
tk.mybatis如何扩展自己的通用mapper
2022-02-16 04:10:17
Android实现点汇聚成字的动态效果详解
2023-10-08 08:50:26
Java对象的内存布局详细介绍
2021-07-28 05:11:38
Java设计模式之监听器模式实例详解
2022-10-04 02:51:44
Java 按照字节来截取字符串的代码(不会出现半个汉字)
2023-04-30 01:40:22
Linux下g++编译与使用静态库和动态库的方法
2023-06-21 13:41:46
Android自定义控件实现时间轴
2021-07-12 04:13:08
一篇文章弄懂Java8中的时间处理
2022-07-22 07:56:32
Android应用开发中CardView的初步使用指南
2022-12-30 02:04:47