首先提出一個問題:給你很多的姓名,讓你找出一個姓氏的所有人,用程式實現。
這個程式用很多方法可以實現,這篇博文中,我們就利用委託和Lambda運算式的方法實現。
首先把所有的姓名放到一個集合中
List<string> list = new List<string> { "田三濤", "劉起涵", "張曉軒", "田聖彤", "文筠彤", "劉起涵", "田優喬", "文嘉珊", "白田彤", "廖子棉", "張澤菲", "田贊鑫" };
然後利用List<T>的FindAll(Predicate<T> match)方法找到所有符合姓“田”的字串。Predicate<T> 是對方法的委託,如果傳遞給它的對象與委託中定義的條件匹配,則該方法返回 true。 當前 List<T> 的元素被逐個傳遞給 Predicate<T> 委託,滿足條件的元素被儲存在返回的 List<T> 中。
下面我分別用C#1.0,C#2.0,C#3.0的方法完成我們的程式。
C#1.0
先定義一個靜態方法,代碼如下:
public static bool IsMatch(string s) { return s.IndexOf("田") == 0; }
通過調用list.FindAll(IsMatch),找到所有姓氏為“田”的字串。
C#2.0
直接寫成如下代碼即可
list.FindAll(delegate(string s) { return s.IndexOf("田") == 0; });
C#3.0,Lambda運算式
寫成如下形式
list.FindAll(s => s.IndexOf("田") == 0);
完整的程式碼:
class Program { static void Main(string[] args) { List<string> list = new List<string> { "田三濤", "劉起涵", "張曉軒", "田聖彤", "文筠彤", "劉起涵", "田優喬", "文嘉珊", "白田彤", "廖子棉", "張澤菲", "田贊鑫" }; //C#1.0 //List<string> result = list.FindAll(IsMatch); //C#2.0 //List<string> result = list.FindAll(delegate(string s) // { // return s.IndexOf("田") == 0; // }); //C#3.0 List<string> result = list.FindAll(s => s.IndexOf("田") == 0); foreach (var item in result) { Console.WriteLine(item); } } public static bool IsMatch(string s) { return s.IndexOf("田") == 0; } }
通過比較C#1.0,C#2.0,C#3.0對程式的實現,我們發現C#越來越人性化,更加符合人的思維方式。