大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C#技巧 > ASP.NET MVC之扩展方法、链式编程

ASP.NET MVC之扩展方法、链式编程(2)

关键词:ASP.NETMVC扩展方法链式编程  阅读(1858) 赞(10)

[摘要]本文是对ASP.NET MVC之扩展方法、链式编程的讲解,对学习C#编程技术有所帮助,与大家分享。

重新定义了ShoppingList类型,让其实现IEnumerable<Commodity>接口类型和IEnumerator<Commodity>接口类型,为什么要实现IEnumerable<Commodity>接口类型呢?因为示例代码中也要用到Linq的扩展方法,那些扩展方法是基于IEnumerable<T>类型扩展的,在第一部分中已经使用到了,细心的朋友可能已经留意到了。

对ShoppingListExtension类型也稍作修改,添加了新的扩展方法,并且修改了之前的扩展方法,达到了消耦的目的。

代码2-2

 using BlogCase;
 using System.Linq;
 namespace BlogCase.Extension
 {
     public static class ShoppingListExtension
     {
         public static float Total(this IEnumerable<Commodity> shoppintlist)
         {
             return shoppintlist.Sum(commodity => commodity.Price);
         }
 
         public static IEnumerable<Commodity> Filter(this IEnumerable<Commodity> shoppinglist, Func<Commodity, bool> commodityFilter)
         {
             var commodities = shoppinglist.Where(commodityFilter);
             return commodities;
         }
     }
 }

修改后的ShoppingListExtension类中,Total扩展方法的针对的类型变换掉了,而在Filter扩展方法中把返回类型定义为IEnumerable<Commodity>类型,并且定义了一个参数,参数类型为Func<Commodity, bool> 的委托,完全可以用lambda表达式代替,对于lambda的知识后续的篇幅中会有说到。都做了修改后,那我们来看一下测试时的代码。

代码2-3

 using BlogCase.Extension;
 namespace BlogCase
 {
     class Program
     {
         static void Main(string[] args)
         {
             ShoppingList shoppinglistTest = new ShoppingList();
             shoppinglistTest.Add(new Commodity() { Name = "A", Price = 50.3f });
             shoppinglistTest.Add(new Commodity() { Name = "B", Price = 60 });
             shoppinglistTest.Add(new Commodity() { Name = "C", Price = 70.9f });
             shoppinglistTest.Add(new Commodity() { Name = "D", Price = 80.3f });
 
             Console.WriteLine(shoppinglistTest.Filter(commodity=>commodity.Price>58).Total().ToString());
             Console.ReadLine();
         }
      }
 }

运行结果如图3

图3

从shoppinglistTest变量调用扩展方法Filter时,传入了一个查询条件(货品加个大于58)这个扩展方法返回的就是上面说的IEnumerable<Commodity>类型,然后紧接着调用IEnumerable<Commodity>类型的扩展方法Total。

到这里简单的一个链式编程模型就出来了,有兴趣的朋友可以接着去深入的了解linq,当然在此之前看完我的后续文章很重要。

«上一页12下一页»


相关评论