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 ...
随机推荐
- 怎样使用SetTimer MFC 够具体
转自:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中,常常使用的一个事件.借助它能够产生定时运行动作 ...
- PMP考试的过与只是
我在一年多时间里參加了三次PMP考试,前两次都失败,直到第三次才成功.怎样对待失败?这是每个人都会遇到的挑战.假设我们能用正确的态度对待临时的失败,那么终于的成功也就不远了.我希望通过本文与大家分享一 ...
- [转]开源应用架构之asterisk
作者:Russell Bryant 翻译:jiazhengfeng Asterisk[1]是一款GPLv2协议下的开源电话应用平台.简单来说,Asterisk是一个服务器应用,能够完成发起电话呼叫.接 ...
- 一些as的配置
打开Android Studio首选项对话框(Mac用户选择Android Studio菜单,Windows用户选择File → Settings菜单).分别展开Editor和Code Style选项 ...
- Tomcat的server.xml(中文版)
原文地址: http://www.blogjava.net/ranxiang/articles/23145.html <!-- Example Server Configuration File ...
- MSDN无法显示该页的解决办法
今天打开msdn,发现 查阅api时候 出现 “无法显示该页的解决办法“ 这个问题.解决方案如下: 在“运行”中输入regsvr32 "C:\Program Files\Common Fil ...
- VS2015+TFS2015源代码管理
使用Visual Studio连接TFS
- nginx介绍及安装
nginx(Engine x) 静态的www软件 特点: 配置简单 高并发,1-2w,基于异步IO模型(epoll,kqueue) 占用资源少 ...
- Error parsing XML: not well-formed (invalid token)
从网络上或别的文件复制粘贴进来的代码有隐含格式,可将内容先粘贴进记事本清除格式,再复制粘贴进工程文件,即可解决此问题 注:1. 要使工程文件全选清空, 2. 若粘贴后刷新仍无效果,可手动输入
- 完美解决 未能打开编辑器:Unmatched braces in the pattern.
Eclipse出现这个问题而不能查看源代码 原因就是语言包的问题 出现这个问题了 一定是安装了中文或者多国语言包 下面我就来交大家解决的办法 超简单的 第一步 配置自己Eclipse的启动参数 ecl ...