手写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 IEnumerable MyWhere(IEnumerable list, Funcbool> action)
        {
            var result = new List();
            foreach (var item in list)
            {
                if (action(item))
                {
                    result.Add(item);
                }
            }
            return result;
        }

        static IEnumerable MyWhere2(IEnumerable list, Funcbool> action)
        {
            foreach (var item in list)
            {
                if (action(item))
                {
                    yield return item; //通过yield可以实现处理一条返回一条,提高了数据处理效率
                }
            }
        }
    }
}
 
C