比如List<T>.Find()函数,里面的定义是
List<T>.FindAll(Predicate<T> match)
这个Predicate委托就是在2.0时代开始大量应用的,举一个小例子看看2.0和3.5的区别
找出所有字符串长度小于等于4的names
用2.0来做
List<string> names = new List<string>(new string[] { "tom", "grace", "wang", "zhang" });
List<string> goodNames = names.FindAll(delegate(string s) { return s.Length <= 4; });
用3.5来做
List<string> names = new List<string>(new string[] { "tom", "grace", "wang", "zhang" });
List<string> goodNames = names.FindAll(s => s.Length <= 4);
有什么不同吗?唯一的不同就是用lamda表达式代替了讨厌的匿名委托
当然,我们可以用.net 3.5的特殊语法更简洁的来写
var goodNames = names.where(s=>s.Length <= 4).toList();
不过核心思想和2.0时代的那段代码是一样的
所以说,LINQ很多关键技术和思想在2.0时代就早已成熟并已经大量使用,微软只不过是更加完美的完善了一下而已
List<T>.FindAll(Predicate<T> match)
这个Predicate委托就是在2.0时代开始大量应用的,举一个小例子看看2.0和3.5的区别
找出所有字符串长度小于等于4的names
用2.0来做
List<string> names = new List<string>(new string[] { "tom", "grace", "wang", "zhang" });
List<string> goodNames = names.FindAll(delegate(string s) { return s.Length <= 4; });
用3.5来做
List<string> names = new List<string>(new string[] { "tom", "grace", "wang", "zhang" });
List<string> goodNames = names.FindAll(s => s.Length <= 4);
有什么不同吗?唯一的不同就是用lamda表达式代替了讨厌的匿名委托
当然,我们可以用.net 3.5的特殊语法更简洁的来写
var goodNames = names.where(s=>s.Length <= 4).toList();
不过核心思想和2.0时代的那段代码是一样的
所以说,LINQ很多关键技术和思想在2.0时代就早已成熟并已经大量使用,微软只不过是更加完美的完善了一下而已