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表达式学习日记的更多相关文章

  1. C# Lambda 表达式学习之(三):动态构建类似于 c => c.Age == null || c.Age > 18 的表达式

    可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...

  2. C# Lambda 表达式学习之(四):动态构建类似于 c => c.Age == 2 || c.Age == 5 || c => c.Age == 17 等等一个或多个 OrElse 的表达式

    可能你还感兴趣: 1. C# Lambda 表达式学习之(一):得到一个类的字段(Field)或属性(Property)名,强类型得到 2. C# Lambda 表达式学习之(二):LambdaExp ...

  3. java lambda表达式学习笔记

    lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...

  4. java 8 中lambda表达式学习

    转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...

  5. C# Lambda表达式学习笔记

    本笔记摘抄自:https://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html,记录一下学习过程以备后续查用.     一.Lambda ...

  6. Lambda 表达式 学习

    最近几天在学习Lambda,给我的理解就是一个匿名函数的升级版,代码极大可能的简洁了很多,不需要像以前一样必须使用众多的代码才能实现相关功能. 慢慢积累学习,将Java 8的相关知识进行一个学习. 用 ...

  7. Python中lambda表达式学习

    lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是起到一个函数速写的作用.允 ...

  8. C++11 lambda表达式学习

    lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档h ...

  9. python第l六天,lambda表达式学习,涉及filter及Map。

    在python中lambda表达式可以作为匿名函数来使用,举一个简单的栗子: 以前我们写两个数相加的函数需要 #以前我们写两个数相加的函数,需要这样写 >>> def sum(x,y ...

随机推荐

  1. 怎样使用SetTimer MFC 够具体

    转自:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中,常常使用的一个事件.借助它能够产生定时运行动作 ...

  2. PMP考试的过与只是

    我在一年多时间里參加了三次PMP考试,前两次都失败,直到第三次才成功.怎样对待失败?这是每个人都会遇到的挑战.假设我们能用正确的态度对待临时的失败,那么终于的成功也就不远了.我希望通过本文与大家分享一 ...

  3. [转]开源应用架构之asterisk

    作者:Russell Bryant 翻译:jiazhengfeng Asterisk[1]是一款GPLv2协议下的开源电话应用平台.简单来说,Asterisk是一个服务器应用,能够完成发起电话呼叫.接 ...

  4. 一些as的配置

    打开Android Studio首选项对话框(Mac用户选择Android Studio菜单,Windows用户选择File → Settings菜单).分别展开Editor和Code Style选项 ...

  5. Tomcat的server.xml(中文版)

    原文地址: http://www.blogjava.net/ranxiang/articles/23145.html <!-- Example Server Configuration File ...

  6. MSDN无法显示该页的解决办法

    今天打开msdn,发现 查阅api时候 出现 “无法显示该页的解决办法“ 这个问题.解决方案如下: 在“运行”中输入regsvr32 "C:\Program Files\Common Fil ...

  7. VS2015+TFS2015源代码管理

    使用Visual Studio连接TFS

  8. nginx介绍及安装

    nginx(Engine x)      静态的www软件    特点:        配置简单        高并发,1-2w,基于异步IO模型(epoll,kqueue)        占用资源少 ...

  9. Error parsing XML: not well-formed (invalid token)

    从网络上或别的文件复制粘贴进来的代码有隐含格式,可将内容先粘贴进记事本清除格式,再复制粘贴进工程文件,即可解决此问题 注:1. 要使工程文件全选清空, 2. 若粘贴后刷新仍无效果,可手动输入

  10. 完美解决 未能打开编辑器:Unmatched braces in the pattern.

    Eclipse出现这个问题而不能查看源代码 原因就是语言包的问题 出现这个问题了 一定是安装了中文或者多国语言包 下面我就来交大家解决的办法 超简单的 第一步 配置自己Eclipse的启动参数 ecl ...