手写Linq Where方法
在编译器中可以看到,Linq的Where方法实际上是微软提供的一个便捷的拓展方法,其方法签名如上,我们也可以试着手写一遍
using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { int[] nums = new int[] { 2, 1, 4, 11, 24, 31, 1211, 33112, 0 }; var result = nums.Where(a => a > 10);//通过Ling的Where拓展方法筛选数据 foreach (var i in result) { Console.WriteLine(i); } var result2 = MyWhere<int, bool>(nums, a => a > 10); //简单重写了Linq的Where方法,没有使用拓展方法 foreach (var i in result2) { Console.WriteLine(i); } var result3 = MyWhere2<int, bool>(nums, a => a > 10); foreach (var i in result2) { Console.WriteLine(i); } } static IEnumerableMyWhere (IEnumerable list, Func bool> action) { var result = new List (); foreach (var item in list) { if (action(item)) { result.Add(item); } } return result; } static IEnumerable MyWhere2 (IEnumerable list, Func bool> action) { foreach (var item in list) { if (action(item)) { yield return item; //通过yield可以实现处理一条返回一条,提高了数据处理效率 } } } } }