C# 傳統的委托、匿名方法、Lambda對比
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LambdaDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("傳統的委托代碼示例:");
FindListDelegate();
Console.Write("\n");
Console.WriteLine("使用匿名方法的示例:");
FindListAnonymousMethod();
Console.Write("\n");
Console.WriteLine("使用Lambda的示例:");
FindListLambdaExpression();
}
//傳統的調用委托的示例
static void FindListDelegate()
{
//先創建一個泛型的List類
List list = new List();
list.AddRange(new string[] { "ASP.NET課程","J2EE課程", "PHP課程", "數據結構課程" });
Predicate findPredicate = new Predicate(IsBookCategory);
List bookCategory = list.FindAll(findPredicate);
foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
}
//謂詞方法,這個方法將被傳遞給FindAll方法進行書書籍分類的判斷
static bool IsBookCategory(string str)
{
return str.EndsWith("課程") ? true : false;
}
//使用匿名方法來進行搜索過程
static void FindListAnonymousMethod()
{
//先創建一個泛型的List類
List list = new List();
list.AddRange(new string[] { "ASP.NET課程", "J2EE課程", "PHP課程", "數據結構課程" });
//在這裡,使用匿名方法直接為委托創建一個代碼塊,而不用去創建單獨的方法
List bookCategory = list.FindAll
(
delegate(string str)
{
return str.EndsWith("課程") ? true : false;
}
);
foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
}
//使用Lambda來實現搜索過程
static void FindListLambdaExpression()
{
//先創建一個泛型的List類
List list = new List();
list.AddRange(new string[] { "ASP.NET課程", "J2EE課程", "PHP課程", "數據結構課程" });
//在這裡,使用了Lambda來創建一個委托方法
List bookCategory = list.FindAll((string str) => str.EndsWith("課程"));
foreach (string str in bookCategory)
{
Console.WriteLine("{0}\t", str);
}
Console.ReadLine();
}
}
}