转自: http://www.cnblogs.com/OceanEyes/archive/2012/08/27/linq-2.html
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托Test { delegate bool FilterDelegate(int i); class Program { static void Main(string[] args) { int[] array = { 1, 2, 3, 5, 6, 6, 7, 8, 9 }; List<int> newList = MyFilter(array,FilterOdd); foreach (int item in newList) { Console.WriteLine(item); } Console.ReadKey(); } static List<int> MyFilter(int[] array, FilterDelegate filter) { List<int> list = new List<int>(); for (int i = 0; i < array.Length; i++) { if (filter(i)) { list.Add(i); } } return list; } /// <summary> /// 偶数 /// </summary> /// <param name="i"></param> /// <returns></returns> static bool FilterEven(int i) { return i % 2 == 0; } /// <summary> /// 奇数 /// </summary> /// <param name="i"></param> /// <returns></returns> static bool FilterOdd(int i) { return i % 2 == 1; } } }
//例如 delegate void Del(int x); .... Del d = delegate(int k) { /* ... */ };
所以上面例子小小改动一下即可:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托Test { delegate bool FilterDelegate(int i); class Program { static void Main(string[] args) { int[] array = { 1, 2, 3, 5, 6, 6, 7, 8, 9 }; //使用匿名方法来求偶数 List<int> newList = MyFilter(array, delegate(int i) { return i % 2 == 0; }); foreach (int item in newList) { Console.WriteLine(item); } Console.ReadKey(); } static List<int> MyFilter(int[] array, FilterDelegate filter) { List<int> list = new List<int>(); for (int i = 0; i < array.Length; i++) { if (filter(i)) { list.Add(i); } } return list; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托Test { delegate bool FilterDelegate(int i); class Program { static void Main(string[] args) { int[] array = { 1, 2, 3, 5, 6, 6, 7, 8, 9 }; //使用Lambda表达式来求偶数 List<int> newList = MyFilter(array, i => i % 2==0); foreach (int item in newList) { Console.WriteLine(item); } Console.ReadKey(); } static List<int> MyFilter(int[] array, FilterDelegate filter) { List<int> list = new List<int>(); for (int i = 0; i < array.Length; i++) { if (filter(i)) { list.Add(i); } } return list; } } }
(请注意,我标注出来的Fun<T,TResult>是一个委托!)
所以再对上面的Filter进行改进:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托Test { //delegate bool FilterDelegate(int i); class Program { static void Main(string[] args) { int[] array = { 1, 2, 3, 5, 6, 6, 7, 8, 9 }; //使用匿名方法来求偶数 //List<int> newList = MyFilter(array, delegate(int i) { // return i % 2 == 0; //}); //使用Lambda表达式求偶数 List<int> newList = MyFilter(array, i => i % 2 == 0); foreach (int item in newList) { Console.WriteLine(item); } Console.ReadKey(); } //Func<int,bool>: 封装了一个具有一个int参数并且返回类型为bool类型的方法 static List<int> MyFilter(int[] array,Func<int,bool> filter) { List<int> list = new List<int>(); for (int i = 0; i < array.Length; i++) { if (filter(i)) { list.Add(i); } } return list; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LambdaDemo { class Program { static void Main(string[] args) { string[] names = {"Eyes","Voodoo","Tod","Chris","Christina","Maxisim" }; Func<string, bool> filter = s => s.Length > 5; Func<string, string> order = s => s; Func<string, string> operating = s => s.ToUpper(); IEnumerable<string> expr = names.Where(filter).OrderByDescending(order).Select(operating); expr.ToList<string>().ForEach(i => Console.WriteLine(i)); Console.ReadKey(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; namespace Lambda表达式树 { class Program { static void Main(string[] args) { //计算(Price-5)*Count*Rebate ParameterExpression paraPrice = Expression.Parameter(typeof(decimal),"price"); ConstantExpression constant = Expression.Constant(5m,typeof(decimal)); BinaryExpression result1 = Expression.Subtract(paraPrice, constant); ParameterExpression paraCount = Expression.Parameter(typeof(decimal),"count"); ParameterExpression paraRebate = Expression.Parameter(typeof(decimal),"rebate"); BinaryExpression result2 = Expression.Multiply(paraCount,paraRebate); BinaryExpression result3 = Expression.Multiply(result1,result2); Expression<Func<decimal, decimal, decimal, decimal>> totalPrice = Expression.Lambda<Func<decimal, decimal, decimal, decimal>>(result3,paraPrice,paraCount,paraRebate); Func<decimal, decimal, decimal, decimal> myFun = totalPrice.Compile(); Console.WriteLine(myFun(125m,10m,0.5m)); Console.ReadKey(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Linq.Expressions; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Expression<Func<int, int>> f1 = x => x + 1; //f1(1)//...错误,必须将表达式树表示的代码编译成一个可执行委托 Func<int, int> f2 = f1.Compile(); Console.WriteLine(f2(2)); Console.ReadKey(); } } }
相关推荐
● lambda表达式语法 ● 流与管道的基本操作 ● 使用收集器与汇聚来终止管道 ● 创建流 ● 分割迭代器、fork/join框架与异常 ● 使用微基准测试检查流的性能 ● 使用默认方法演化API 目录 第1章 走进新生代...
Stream、Lambda表达式练习.doc
2_Lambda表达式.zip2_Lambda表达式.zip2_Lambda表达式.zip
Java8发布到现在至少3年了,但是对Lambda表达式不熟悉、看不懂、不会用的现象非常常见。 即使是升级到JDK1.8了,但是很多开发者依然是停留在1.8之前的开发方式,使用的也是非常老旧和过时的API,遇到函数式接口也是...
主要介绍了解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
适用人群 本源码资源适用于具备一定Java编程基础的开发人员和学习者。...2、函数式接口与Lambda表达式:学习如何使用Lambda表达式与不同类型的函数式接口进行交互,并了解如何通过Lambda表达式实现函数的传递和组合
通过多个示例详细演示了.Net中C#语言lambda表达式的基本用法,主要包括三个方面内容: 1.什么是lambda表达式 2.理解lambda表达式 3.使用lambda表达式
Microsoft Visual Studio.Net(VS2010)编写的lambda表达式语法控制台程序。
用于将将字符串转换为lambda表达式,对于实时获取运算结果或界面筛选条件,很有帮助
Java8的lambda表达式
简单的一些lambda表达式的测试代码,可用来学习简单的一些lambda表达式的测试代码,可用来学习
java lambda表达式,lambda 表达式基本上表达了函数式接口的实例(具有单一抽象方法的接口称为函数式接口。一个例子是 java.lang.Runnable)。lambda 表达式实现了唯一的抽象函数,因此实现了函数式接口 lambda ...
Lambda表达式之集合操作,代码里主要针对java 集合list的操作
什么是Linq表达式什么是Lambda表达式.pdf 什么是Linq表达式什么是Lambda表达式.pdf
Lambda表达式浅析
C#将Lambda表达式转成Sql语句,根据自己看的文章手写出来的,并配有自己理解的注释,有需要的同学可以自行下载。
java8lambda表达式的安卓Studio工程Demo,供初步学习使用
精通lambda表达式:Java多核编程,使用lambda表达式和流的最佳实践
这份资源详细介绍了Python语言中lambda表达式的使用方法和技巧。lambda表达式是Python语言中的一种匿名函数,通常用于编写简洁的代码和函数式编程。 文档中详细介绍了lambda表达式的基本语法和使用方式,以及如何将...
关于Java中lambda的表达式,Java多核编程,清华大学(出版)