C#学习 深入理解委托、匿名方法、Lamda表达式、Linq;

news/2024/9/17 4:45:14/ 标签: c#, 学习, linq

目录

一.委托 

1.1 什么是委托 

1.2 委托的使用

二.匿名方法和Lamda表达式 

2.1 什么是匿名方法 

2.2 Lambda表达式

三.Linq 

3.1 Linq理解 

3.2 Linq的扩展方法

一.委托 

1.1 什么是委托 

委托和类一样,是具有特定参数列表和返回值类型的方法函数的引用,在实例化委托时可以将实例化委托和兼容签名和返回值类型的方法相关联,从而使用该委托回调该方法;

      1.2 委托的使用

委托可以在类的外面和类的里面进行声明方法,一般用delegate关键字进行声明,如下;

<访问修饰符>   delegate <返回值类型>  方法名或者叫自定义委托名 (返回参数)

private delegate void method(int a);

同时也可以使用Action和Func进行内联声明,其中Action是返回值为空,0-16的任何参数的方法的声明;Func任何一个返回值的,0-16的任何参数的方法的声明;

 Action f1 = (int i, int j) => i * j;
  Func<int,int,int> f11 = (i, j) => { return i+j; };

二.匿名方法和Lamda表达式 

2.1 什么是匿名方法 

匿名方法以内联的方式将方法放入委托使用对象的位置,也就是委托调用匿名的方法,将委托实例和方法体代码关联,这样减少重复的代码编写,如将方法名匿名不写,提升了代码的精简;

匿名方法的声明:delegate(方法参数)=> {方法体}

   Action f1 = delegate (){Console.WriteLine("我是AAA");};

       2.2 Lambda表达式

Lambda表达式本质上还是委托,为C#提供了更加简洁的语法,同时也为Linq提供了语法基础;

Lambda表达式语法:

  • 多种参数多条语句:(参数)=>{函数体}
   Func<int,int> test1 = (i, j) =>{if (i > j){Console.WriteLine(i + "比" + j + "大");}else{Console.WriteLine(i + "比" + j + "小")}}
  • 多条参数单条语句:(参数)=>函数体
//多条参数单条语句:(参数)=>函数体
Func<string, string> test3 = (i, j) => i + j;
  • 单条语句多条语句:参数=>{函数体}
​//多条参数单条语句:(参数)=>函数体Func<string> test2 = i =>{if(Empty(i)){Console.WriteLine("为空");}}​
  • 单条语句单条语句:参数=>函数体

  //单条语句单条语句:参数 => 函数体Action<int> test4=i=>Console.Write(i);

三.Linq 

3.1 Linq理解 

Linq(语言集成查询)提供了语言的查询功能以及高阶函数的API,Linq可以用最少的代码对数据源执行筛选、排序和分组操作。 可使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO .NET 数据集、XML 文档和流以及 .NET 集合中的数据。

其中Lambda表达式和Linq并没有太大关联,两者只是只是相互关联嵌套使用;

3.2 Linq的扩展方法

  • Any()方法:判断是否有一条数据
List list=new List();
list.Add(1);
bool b=list.Any(a => a > 0);
bool b = list.where(a => a > 0).any();
  • 获取一条数据(是否带参数的两种写法):

Single:有且只有一条满足要求的数据;

SingleOrDefault():最多只有一条满足要求的数据;

First():至少有一条,返回第一条;

FirstOrDefault():返回第一条或者返回默认值;

  • 多规则排序

 可以在Order()、OrderByDescending()后继续写ThenBy()、ThenByDescending(). 

例如优先按照Age排序,如果Age相同再按照Salary排序;

 List<Employee> list=new List<Employee>();list.Add(new Employee{Id=1,Name="xiao1",Gender=true,Age=20,Salary=20023});list.Add(new Employee{Id=2,Name="xiao2",Gender=false,Age=21,Salary=2010});list.Add(new Employee{Id=3,Name="xiao3",Gender=true,Age=22,Salary=20110});list.Add(new Employee{Id=4,Name="xiao4",Gender=true,Age=49,Salary=2001});list.OrderBy(e => e.Age).ThenByDescending(e => e.Salary);

千万不能Order()、OrderByDescending()同时使用,例如:

   list.OrderBy(e => e.Age).OrderByDescending(e => e.Salary);
  •  限制结果集,获取部分数据

skip(n):跳过N条数据

take(n):获取N条数据

例如:从第一条开始获取第二条数据

 List<Employee> list=new List<Employee>();list.Add(new Employee{Id=1,Name="xiao1",Gender=true,Age=20,Salary=20023});list.Add(new Employee{Id=2,Name="xiao2",Gender=false,Age=21,Salary=2010});list.Add(new Employee{Id=3,Name="xiao3",Gender=true,Age=22,Salary=20110});list.Add(new Employee{Id=4,Name="xiao4",Gender=true,Age=49,Salary=2001});var list1 = list.Skip(1).Take(2);

 分组  GroupBy():

GroupBy()方法参数是分组条件表达式,  返回值为IGrouping<TKey, TSource>类型的泛型 IEnumerable,也就是每一组以一个 IGrouping对象的形式返回。IGrouping是一 个继承自IEnumerable的接口,IGrouping中 Key属性表示这一组的分组数据的值。 例子:根据年龄分组,获取每组入数、最高工资、平均工资。用var简化编程。

Enumerable本质上他也是集合

投影:

 把集合中的每一项转换为另外一种类型。

IEnumerable<int> ages = list.Select(e => e.Age);Enumerable<string>; names = list.Select(e=>e.Gender?"男":"女");var dogs = list.Select(p=>new Dog(NickName=e.Name,Age=e.Age));

 

例题:

统计一个字符串中每个字母出 现的频率(忽略大小写),然后按照从高到低的顺序输出,出现频率高于2次的单词和其出现的频率:  

 

 


http://www.ppmy.cn/news/1522941.html

相关文章

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则&#xff0c;你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则&#xff0c;任何人都可以定协议 我们不需要太了解细节&#xff0c;这些制定和完善协议的人去做的&#xff0c;我们只需要知道协议的一个大概 HTTPS 协议 1、概述…

【2.2 简单的逻辑电路,包括与门、与非门、或门】

2.2 简单的逻辑电路&#xff0c;包括与门、与非门、或门 在深度学习中&#xff0c;直接实现传统逻辑电路&#xff08;如与门、与非门、或门&#xff09;并不是最常见的应用&#xff0c;因为深度学习模型&#xff08;如神经网络&#xff09;通常用于处理更复杂、更抽象的数据表示…

Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)

文章目录 引言I 跨域运行案例开发资源测试/生产环境,Nginx代理转发,实现跨域运行本机开发运行II nginx的location指令Nginx配置中, 获取自定义请求header头Nginx 配置中,获取URL参数引言 背景:全景监控 需求:感知站点由于云台相关操作为 http 请求,http 请求受浏览器…

MonoHuman: Animatable Human Neural Field from Monocular Video 精读

一、共享双向变形模块 1. 模块的核心思想 共享双向变形模块的核心目标是解决从单目视频中生成不同姿态下的3D人体形状问题。因为视频中的人物可能处于各种动态姿态下&#xff0c;模型需要能够将这些不同姿态的几何形状进行变形处理&#xff0c;以适应标准的姿态表示并生成新的…

Anthropic发布Claude企业计划 对标OpenAI的ChatGPT Enterprise

领先的人工智能初创公司 Anthropic 今天宣布推出Claude企业计划&#xff0c;以扩大Claude在企业中的应用。OpenAI 早在 2023 年就推出了名为ChatGPT Enterprise 的类似产品&#xff0c;并取得了相当大的成功。事实上&#xff0c;OpenAI 声称&#xff0c;财富 500 强中已有 92% …

python网络爬虫(五)——爬取天气预报

1.注册高德天气key 点击高德天气&#xff0c;然后按照开发者文档完成key注册&#xff1b;作为爬虫练习项目之一。从高德地图json数据接口获取天气&#xff0c;可以获取某省的所有城市天气&#xff0c;高德地图的这个接口还能获取县城的天气。其天气查询API服务地址为https://re…

在模板中使用 Django 会话

在 Django 中使用会话&#xff08;session&#xff09;可以让你在用户访问网站的过程中存储和访问临时数据。我们可以利用会话在速度计算器的例子中存储和显示上次计算的结果。 1、问题背景 在 Django 中&#xff0c;可以使用会话来存储用户数据。在某些情况下&#xff0c;我们…

如何使用PTK一键安装opengaussdb 5.0

1、关于PTK工具 MogDB数据库是云和恩墨基于openGauss开源数据库打造&#xff0c;安稳易用的企业级关系型数据库。 PTK是云和恩墨出品的一款工具&#xff0c;帮助用户更便捷地部署管理MogDB数据库。 1.1 使用场景 开发人员快速启动多个本地 MogDB 环境用户通过 PTK 快速安装…

QString如何格式化字符串

在Qt中&#xff0c;QString类提供了多种方式来格式化字符串。这包括使用arg()方法、sprintf()风格的格式化&#xff08;通过QString::asprintf()或QString::number()等辅助函数&#xff09;&#xff0c;以及从Qt 5.10开始引入的C11风格的格式化&#xff08;虽然Qt核心库本身并不…

软件测试之压力测试知识总结

软件测试之压力测试知识总结 引言 随着信息技术的飞速发展&#xff0c;软件系统在各个行业中的应用越来越广泛&#xff0c;其稳定性和可靠性成为用户关注的焦点。压力测试作为软件测试中的一种重要方法&#xff0c;对于确保软件在高负载环境下的稳定性和可靠性具有重要意义。…

专业文字处理与协作软件Adobe InCopy(IC)2024WIN/MAC下载及安装教程

目录 简介&#xff1a; 一、Adobe InCopy软件概述 软件基本信息 主要特点 最新版本 二、下载与安装 下载 安装 Windows系统安装 Mac系统安装 三、系统要求 Windows系统要求 Mac系统要求 四、使用教程 基本操作 高级功能 协作与共享 简介&#xff1a; Adobe I…

“Jmeter-InfluxDB-Grafana“常见错误有哪些如何解决?

常见错误&#xff1a; 1.网络不同&#xff0c;检查网络IP是否写对&#xff0c;端口号有没有放开&#xff08;Centos7端口号命令&#xff09;&#xff0c;防火墙是否关闭 firewall-cmd --add-port3000/tcp --permanent firewall-cmd --add-port3000/udp --permanent firewall-…

DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3)

DNN学习平台&#xff08;GoogleNet、SSD、FastRCNN、Yolov3&#xff09; 前言相关介绍1&#xff0c;登录界面&#xff1a;2&#xff0c;主界面&#xff1a;3&#xff0c;部分功能演示如下&#xff08;1&#xff09;识别网络图片&#xff08;2&#xff09;GoogleNet分类&#xf…

【微信小程序入门】4、微信小程序的项目成员和发布上线详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

高清无损!探索PDF转JPG的最佳实践工具

在信息爆炸的今天&#xff0c;PDF文件因其跨平台兼容性和文档保护特性&#xff0c;成为了工作、学习和日常生活中不可或缺的一部分。但是很多时候我们并不需要精度那么高的文件&#xff0c;图片分享更符合快捷的要求。这次我们就一起探讨有什么PDF转jpg的工具吧。 1.福昕PDF转…

ROS笔记之在指定目录及其子目录中查找包含特定ROS话题的bag文件,并输出这些文件的路径

ROS笔记之在指定目录及其子目录中查找包含特定ROS话题的bag文件&#xff0c;并输出这些文件的路径 代码 import os import subprocessdef find_bags_with_topic(root_directory, topic):bags_with_topic []for dirpath, _, filenames in os.walk(root_directory):for filena…

前端基础面试题·第三篇——JavaScript(其二)

1.深浅拷贝 1.浅拷贝 浅拷贝会创建一个新的对象&#xff0c;这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型&#xff0c;拷贝的就是基本类型的值&#xff0c;如果属性是引用类型&#xff0c;拷贝就是改引用类型的地址。 // 常见的浅拷贝1.Object.assign({},ob…

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中&#xff0c; "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时&#xff0c;经常听到第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&#xff08;3NF&#xff09;以及 BCNF&#xff08;Boyce-…

【2024数学建模国赛赛题解析已出】原创免费分享

2024数模国赛赛题已正式发布 数模加油站初步分析评估了此次竞赛题目&#xff1a; A题&#xff1a;偏数学仿真建模&#xff0c;难度偏难&#xff0c;适合数学专业背景的同学 B题&#xff1a;评价决策类&#xff0c;自由度大&#xff0c;容易水&#xff0c;适合基础不太好的同…

requestIdleCallback和requestAnimationFrame有什么区别?

由react fiber引起的关注 组件树转为链表&#xff0c;可分段渲染渲染时可以暂停&#xff0c;去执行其他高优先级任务&#xff0c;空闲时在继续渲染&#xff08;JS是单线程的&#xff0c;JS执行的时候没法去DOM渲染&#xff09;如何判断空闲&#xff1f;requestIdleCallback 区…