转自: 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表达式是现代编程语言中的一种强大工具,特别是在C#中,它的引入极大地简化了对函数式编程的支持。本文将深入探讨Lambda表达式的起源、发展以及其在C#中的应用。 Lambda表达式起源于数学中的λ演算,这是一种...
"C# Lambda 表达式的使用" Lambda 表达式是 C# 编程语言中的一个重要概念,也是函数式编程的基础。Lambda 表达式可以被用作创建委托对象或表达式树类型。所有的 Lambda 表达式都使用操作符“=>“,表示“goes to ...
Lambda表达式是Java编程语言中的一个关键特性,自Java 8开始引入,它极大地简化了函数式编程,尤其是在处理集合数据时。Lambda表达式的主要目的是为了创建匿名函数,即没有名字的函数,它可以被当作一个值传递给方法...
Java8的Lambda表达式是Java语言的一次重大更新,它引入了函数式编程的概念,极大地简化了处理匿名函数的方式,特别是在处理集合和并发操作时。Lambda表达式使得代码更加简洁、易读,同时也提升了程序的执行效率。在...
在.NET框架中,C#是一种强大的编程语言,它支持Lambda表达式,这使得代码更加简洁、易读。Lambda表达式通常用于LINQ(Language Integrated Query)查询,它允许程序员使用类似SQL的语法在内存中的数据集上进行操作。...
Java 8 的引入,尤其是Lambda表达式,对Java语言产生了深远的影响,它为Java开发者带来了更简洁、更灵活的编程方式。Lambda表达式是函数式编程的核心元素,它允许我们将函数作为方法参数传递,或者将代码块当作数据...
Java 8 的 Lambda 表达式是其最显著的新特性之一,它引入了一种更为简洁、函数式的编程风格。Lambda 表达式使得处理匿名函数变得更加简单,尤其在需要定义短小、无状态的代码块时,它们可以极大提高代码的可读性和...
### C++ 中的 Lambda 表达式 #### 引言 C++11引入了许多重要的新特性,其中最显著的一项是Lambda表达式。这一特性极大地简化了代码编写过程,使得开发者能够更方便地创建匿名函数对象。Lambda表达式在很多场景下都...
C++ 11引入了lambda表达式,这是一个强大的特性,极大地增强了C++的函数式编程能力。Lambda表达式允许在程序中直接定义匿名函数,并且可以直接在需要的地方使用,无需预先声明。这对于处理回调函数、简化算法实现...
lambda 表达式和递归算法 lambda 表达式是一种匿名函数,可以用来定义小的、单次使用的函数。它通常用于数据处理、事件处理和其他需要临时函数的情况。lambda 表达式的基本语法是:`lambda arguments : expression`...
Java 8 是一个重要的Java平台版本,因为它引入了许多新特性,其中最显著的就是Lambda表达式。Lambda表达式是函数式编程的关键元素,它允许我们以更简洁、更易读的方式编写代码,特别是在处理集合和并发任务时。在这...
Java 8 引入了Lambda表达式,这是对传统编程方式的一大革新,它极大地简化了函数式编程,尤其是在处理集合和并发操作时。Lambda表达式是Java 8中的一种语法糖,它允许开发者以更简洁的方式定义无状态、无副作用的...
Java 8 引入的 Lambda 表达式是 Java 编程语言的重大变革之一,它允许以更简洁的方式表示单方法接口的实现,极大地增强了 Java 语言的表达能力,尤其是结合了函数式接口、Stream API 和其他新特性后。接下来,我们将...
《精通Lambda表达式:Java多核编程》这本书深入探讨了Java编程中的一种重要特性——Lambda表达式,以及如何在多核环境下充分利用这一特性提高程序性能。Lambda表达式是Java 8引入的关键特性之一,它极大地简化了函数...
Lambda表达式是Java 8引入的一种新的编程特性,它极大地简化了函数式编程,并使得代码更加简洁、易读。在Java中,Lambda表达式可以被理解为匿名函数,即没有名字的函数,它可以被当作方法参数传递,或者作为类的成员...
在编程领域,`lambda`表达式是一种简洁的创建匿名函数的方式,它允许我们在不定义完整函数的情况下使用函数。在Python中,`lambda`表达式特别常见,因为它们可以帮助我们快速编写简洁的一行函数。本文将深入探讨如何...
Java Lambda表达式是Java 8引入的一个重要特性,它极大地简化了函数式编程风格的实现。Lambda表达式允许我们将函数作为一个值传递,就像传递其他数据类型一样。这在处理集合、事件驱动编程以及多线程等场景下尤其...
C# Lambda表达式入门学习资料 本文旨在为新手提供易于理解的C# Lambda表达式入门学习资料,帮助读者快速掌握Lambda表达式的基础知识和应用场景。 Lambda表达式是什么? -------------------- Lambda表达式是一种...
Stream和Lambda表达式实践 在Java中,Stream API是Java 8中引入的一种新的数据处理方式,它可以对集合进行各种操作,如过滤、映射、聚合等。Lambda表达式是Java 8中引入的一种新的函数式编程方式,它可以将函数作为...
Lambda表达式是Java 8引入的一种新特性,它极大地简化了函数式编程,使得代码更加简洁、易读。Lambda表达式本质上是匿名函数,可以理解为没有名字的函数,但功能与普通方法相同,能够被赋值给变量,也可以作为参数...