C#Lambda表达式学习日记
Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的使用。
现在,如果我们要使用泛型 List<> 的 FindAll() 方法,当你从一个集合去提取子集时,可以使用该方法。
// 该方法唯一的参数是一个System.Predicate<T>类型的泛型委托
public List<T> FindAll(Predicate<T> match); // 该委托指向任意以类型参数作为唯一输入参数并返回bool的方法
public delegate bool Predicate<in T>(T obj);
在调用 FindAll() 时,List<T>中每一项都将传入Predicate<T> 对象所指向的方法。方法在实现时将执行一些计算,来判断传入的数据是否符合标准,并返回 true / false,如果返回 true ,该项被添加到表示自己的List<T>集合中。
现在,我们需要从一个List<int>集合中找到所有偶数,该如何实现呢?
1.传统方法
public class MyDelegateSyntax
{public static void Show()
{
Console.WriteLine("fun with lambdas"); List<int> list = new List<int> { , , , , , }; Predicate<int> callback = new Predicate<int>(IsEvenNumber); // 传统方法
List<int> evenList = list.FindAll(callback); Console.WriteLine(); foreach (int item in evenList)
{
Console.WriteLine(item);
}
} private static bool IsEvenNumber(int obj) => obj % == ;
}
2.匿名方法
public class MyDelegateSyntax
{
public static void Show()
{
Console.WriteLine("fun with lambdas"); List<int> list = new List<int> { , , , , , }; // 匿名方法
List<int> evenList = list.FindAll(delegate (int i)
{
return i % == ;
}); Console.WriteLine(); foreach (int item in evenList)
{
Console.WriteLine(item);
}
}
}
3.Lambda表达式
public class MyDelegateSyntax
{
public static void Show()
{
Console.WriteLine("fun with lambdas"); List<int> list = new List<int> { , , , , , }; // Lambda表达式
// 隐式,编辑器会更具上下文表达式推断i的类型
List<int> evenList = list.FindAll(i => i % == ); // 显式
// 描述:我的参数列表(一个整形i)将会被表达式(i%2)==0处理
List<int> evenList1 = list.FindAll((int i) => i % == ); // 我的参数列表(一个整形i)将会被表达式(i%2)==0处理 Console.WriteLine(); foreach (int item in evenList)
{
Console.WriteLine(item);
}
}
}
4.使用多个语句处理参数(“{}”)
public class MyDelegateSyntax
{
public static void Show()
{
Console.WriteLine("fun with lambdas"); List<int> list = new List<int> { , , , , , }; // 多个处理语句 语句块 {}
List<int> evenList = list.FindAll(i =>
{
Console.WriteLine(i);
return i % == ;
}); Console.WriteLine(); foreach (int item in evenList)
{
Console.WriteLine(item);
}
}
}
5.含有多个(或零个)参数的Lambda表达式
public class MyDelegateSyntax
{
public delegate string VerySimpleDelegate(); public delegate void MathMessage(string msg, int result); public static void Show()
{
Console.WriteLine("fun with lambdas");
// 多个参数的Lambda
MathMessage mm = new MathMessage((msg, result) => Console.WriteLine($"msg:{msg} result:{result}"));
mm("adding has cmpleted", + ); // 0个参数Lambda
VerySimpleDelegate d = new VerySimpleDelegate(() => "enjoy you string");
Console.WriteLine(d.Invoke());
}
}
学无止境,望各位看官多多指教。
C#Lambda表达式学习日记的更多相关文章
- C# Lambda 表达式学习之(三):动态构建类似于 c => c.Age == null || c.Age > 18 的表达式
可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...
- C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 || c => c.Age == 17 等等一个或多个 OrElse 的表达式
可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...
- java 8 中lambda表达式学习
转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...
- C# Lambda表达式学习笔记
本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用. 一.Lambda ...
- Lambda 表达式 学习
最近几天在学习Lambda,给我的理解就是一个匿名函数的升级版,代码极大可能的简洁了很多,不需要像以前一样必须使用众多的代码才能实现相关功能. 慢慢积累学习,将Java 8的相关知识进行一个学习. 用 ...
- Python中lambda表达式学习
lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...
- C++11 lambda表达式学习
lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ...
- python第l六天,lambda表达式学习,涉及filter及Map。
在python中lambda表达式可以作为匿名函数来使用,举一个简单的栗子: 以前我们写两个数相加的函数需要 #以前我们写两个数相加的函数,需要这样写 >>> def sum(x,y ...
随机推荐
- HDU 1124 Factorial (数论)
http://acm.hdu.edu.cn/showproblem.php? pid=1124 題目好長好長,好可怕,看完腎都萎了,以後肯定活不長.我可不能死在這種小事上,小灰灰我勵志死在少女的超短裙 ...
- 微信支付 V3版
本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...
- 微信上传图文消息invalid media_id hint,thumb_media_id怎么获取
微信上传图文消息thumb_media_id, thumb_media_id怎么获取, 微信群发图文消息invalid media_id hint, 微信群发图文消息40007, 40007,inva ...
- Modem常用概念
真实设备的标识,即DEVICE_ID.比如,Android设备是手机,这个DEVICE_ID可以同通过TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI ...
- navicat 数据库管理工具快捷键
最近在使用navicat 管理数据库中,因为经常要写一些sql的,但是每次都要鼠标点击运行,感觉很不爽,于是找到navicat(以下) 快捷键(最常用的): ctrl + q 打开查询窗口 ctrl ...
- xml--小结③DTD的基本语法(看懂即可)
四.DTD的基本语法(看懂即可)1.DTD:Document Type Definition2.作用:约束XML的书写规范.3.DTD文件保存到磁盘时,必须使用UTF-8编码 4.如何引入外部的DTD ...
- python基础知识十
特殊的方法 在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[k ...
- Android开发手记(17) 数据存储二 文件存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...
- A题笔记(2)
No. 1505 文件读相关 #include <fstream> #include <sstream> <fstream>支持文件的IO <sstream& ...
- http和HTTPS的区别及SSL介绍
简单来说: 在URL前加https://前缀表明是用SSL加密的. 你的电脑与服务器之间收发的信息传输将更加安全. Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定. ...