通过举一个简单的例子分析委托、匿名、Lambda之间的区别。
功能:找出数组中,能被2整除的元素。
输入:一串数组集合。
输出:被2整除的集合。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SimpleLambdaExpressions
{
class Program
{
/// <summary>
/// 功能描述:找出数组中,能被2整除的元素。
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Console.WriteLine("-------------委托方式--------------");
TraditonalDelegeteSyntax();
Console.WriteLine("-------------匿名方式--------------");
AnonymousDelegeteSyntax();
Console.WriteLine("-------------Lambda方式-------------");
LambdaExpressionSyntax();
Console.Read();
}
//委托
static void TraditonalDelegeteSyntax()
{
//通过泛型定义列表数组
List<int> list = new List<int>();
list.AddRange(new int[] { 20, 1, 4, 8, 9, 44});
//实现委托
Predicate<int> callback = new Predicate<int>(IsEvenNumber);
List<int> evenNumbers = list.FindAll(callback);
foreach (int evenNumber in evenNumbers)
{
Console.Write("{0}\t", evenNumber);
}
Console.WriteLine();
}
//需要委托的方法
static bool IsEvenNumber(int i)
{
return (i % 2) == 0;
}
//匿名委托
static void AnonymousDelegeteSyntax()
{
//通过泛型定义列表数组
List<int> list = new List<int>();
list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });
//实现匿名
List<int> evenNumbers = list.FindAll (delegate(int i){ return (i % 2) == 0;});
foreach (int evenNumber in evenNumbers)
{
Console.Write("{0}\t", evenNumber);
}
Console.WriteLine();
}
//Lamdda
static void LambdaExpressionSyntax()
{
//通过泛型定义列表数组
List<int> list = new List<int>();
list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });
//实现Lamdda
List<int> evenNumbers = list.FindAll(i => (i % 2 == 0));
foreach (int evenNumber in evenNumbers)
{
Console.Write("{0}\t", evenNumber);
}
Console.WriteLine();
}
}
}
控制台输出: