最近看了一些博客,对委托和匿名函数和Lambda的方式有了一些更深的理解,在前人的基础上。我也写3个例子
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LamdbaPricticeMine { class Program { delegate bool FilterDelegate(int num); static void Main(string[] args) { List<int> listNumbs = new List<int>(); // 初始化listNumbs listNumbs.AddRange(new int[]{1,2,3,4,5,6}); // 1、委托 Console.WriteLine("用委托的方式输出符合要求的数"); PrintNumByDelegate(listNumbs); // 2、匿名方法 Console.WriteLine("用匿名函数的方式输出符合要求的数"); PrintNumByDelegate(listNumbs); // 3、Lambda表达式 Console.WriteLine("用Lambda的方式输出符合要求的数"); PrintNumByLambdaExpression(listNumbs); Console.ReadLine(); } #region 用委托实现两个数相加 // 调用将委托作为参数的方法,并将实现的方法当做参数 static void PrintNumByDelegate(List<int> listNums) { PrintNumByDelegate(listNums, FilterDelegateEven); } // 定义一个将委托作为参数的方法 static void PrintNumByDelegate(List<int> listNumbs, FilterDelegate selectNums) { foreach (int item in listNumbs) { if (selectNums(item)) { Console.WriteLine(item); } } } // 定义一个类似于委托的实现(偶数) static bool FilterDelegateEven(int num) { return num % 2 == 0; } // 定义第二个委托的实现(基数) static bool FilterDelegateOdd(int num) { return num % 2 == 1; } #endregion #region 匿名函数 static void PrintNumByAnonymousMethod(List<int> listNums) { listNums.FindAll( delegate(int num) { if (num % 2 == 0) { Console.WriteLine(num); return true; } else { return false; } } ); } #endregion #region 用Lambda的方式 static void PrintNumByLambdaExpression(List<int> listNums) { listNums.FindAll((int num) => { if (num % 2 == 0) { Console.WriteLine(num); return true; } else { return false; } }); } #endregion } }