C#体贴之处点滴 - 如果打算写一个类似System.Linq.Enumerable.Where的extention method

原文链接: http://www.cnblogs.com/jamesleng/archive/2011/10/26/2224190.html

说的是C#如何体贴程序员,而非.NET Framework。

如果打算写一个类似System.Linq.Enumerable.Where的extention method,假设命名为Filter,下面是C#为满足此需求下的功夫:

        public static IEnumerable<T> Filter<T>(this IEnumerable<T> source, Func<T, bool> predicate)    
        {
            if (source == null || predicate == null)
            {
                throw new ArgumentNullException();
            }
            return impl(source, predicate);
        }

        private static IEnumerable<T> impl<T>(IEnumerable<T> source, Func<T, bool> predicate)
        {
            foreach (T item in source)
            {
                if (predicate(item))
                {
                    yield return item;
                }
            }
        }

如果不依赖C#的语言糖衣,即上面的二个黑体关键字,纯粹依赖于framework来实现,就得费不少牛劲了。瞎猜一下,如果没有C#的体贴,也就不会有众多精彩纷呈的Linq Provider了!

下面是使用Filter的示例代码,Filter完全等价于Where!而且IDE Intellisense会识别到Filter, 如何,体贴不?

List<Product> products = Product.GetSampleProducts();

foreach (Product product in products.Filter(p => p.Weight > 0))  //可以换成Where

{

  Console.WriteLine (product);

}

转载于:https://www.cnblogs.com/jamesleng/archive/2011/10/26/2224190.html

猜你喜欢

转载自blog.csdn.net/weixin_30328063/article/details/94786450