MVC 中使用扩展方法
扩展方法(Extension Method)是给那些不是你拥有、因而不能直接修改的类添加方法的一种方便的办法。
一、使用扩展方法
1、定义一个购物车的类-ShoppingCart
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public class ShoppingCart:IEnumerable<Product>
{
public List<Product> Products { get; set; } }
}
2、定义一个扩展方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public static class MyExtensionMethods
{
public static decimal TotalPrices(this ShoppingCart cartParam)
{
decimal total = ;
foreach (Product prod in cartParam.Products)
{
total += prod.Price;
}
return total;
} }
}
this 关键字把TotalPrices定义为一个扩展方法 ShoppingCart 告诉。net 这个扩展方法运用与那个类
3、运用扩展方法
public ViewResult UserExtension()
{
//创建并填充ShoppingCart
ShoppingCart cart = new ShoppingCart
{
Products = new List<Product>{
new Product{Name="kayak",Price=275M},//皮划艇
new Product{Name="Lifejacket",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Price=19.50M},//足球
new Product{Name="Corner flag",Price=34.95M}//角旗
}
};
//求去购物车中的产品总价
decimal cartTotal = cart.TotalPrices();
return View("Result", (object)String.Format("Total:{0:c}", cartTotal));
}
4、结果展示

二、对接口运用扩展方法
1、在ShoppingCart类中实现接口
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public class ShoppingCart:IEnumerable<Product>
{
public List<Product> Products { get; set; }
public IEnumerator<Product> GetEnumerator()
{
return Products.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}
2、在接口上工作的扩展方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public static class MyExtensionMethods
{ public static decimal TotalPrices(this IEnumerable<Product> productEnum)
{
decimal total=;
13 foreach(Product prod in productEnum)
14 {
15 total += prod.Price;
}
return total;
}
}
}
3、将扩展方法运用于同一接口的不同实现
public ViewResult UseExtensionEnumerable()
{
IEnumerable<Product> products = new ShoppingCart
{
Products = new List<Product>{
new Product{Name="kayak",Price=275M},//皮划艇
new Product{Name="Lifejacket",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Price=19.50M},//足球
new Product{Name="Corner flag",Price=34.95M}//角旗
}
};
Product[] productArary ={
new Product{Name="kayak",Price=375M},//皮划艇
new Product{Name="Lifejacket",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Price=19.50M},//足球
new Product{Name="Corner flag",Price=34.95M}//角旗
};
//获取购物车中的产品总价
decimal cartTotal = products.TotalPrices();
//获取数组中产品的总价
decimal arrayTotal = productArary.TotalPrices();
return View("Result",(object)String.Format("Cart Total:{0},Array Total:{1}",cartTotal,arrayTotal));
}
4、结果展示

三、创建过滤扩展方法
1、
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Demo.Models
{
public static class MyExtensionMethods
{
public static IEnumerable<Product> FilterByCategory(this IEnumerable<Product> productEnum, string categoryParm)
{
foreach (Product prod in productEnum)
{
if (prod.Category == categoryParm)
{
yield return prod;
}
}
}
}
}
2、使用过滤扩展方法
public ViewResult UseFilterExtensionMethod()
{
IEnumerable<Product> products = new ShoppingCart
{
Products = new List<Product>{
new Product{Name="kayak",Category="Watersports",Price=375M},//皮划艇
new Product{Name="Lifejacket",Category="Watersports",Price=48.95M},//休闲夹克
new Product{Name="Soccer ball",Category="Soccer",Price=19.50M},//足球
new Product{Name="Corner flag",Category="Soccer",Price=34.95M}//角旗
}
};
decimal total = ;
foreach (Product prod in products.FilterByCategory("Soccer"))
{
total += prod.Price;
}
return View("Result",(object)String.Format("Total:{0}",total));
}
3、结果展示

只用Soccer分类中的价格被返回累加出来。
MVC 中使用扩展方法的更多相关文章
- ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法
https://blog.csdn.net/qq_21419015/article/details/80433640 1.示例项目准备1)项目创建新建一个项目,命名为LanguageFeatures ...
- Enum扩展及MVC中DropDownListFor扩展方法的使用
public enum SearchState { /// <summary> /// 全部 /// </summary> [Description("全部" ...
- mvc给html扩展方法:
mvc给html扩展方法: 注意:扩展方法和所在的类都必须是 public static如果在页面直接使用新扩展的方法,需要web.config里把Web.Helper名称命名空间加上,页面才能访问到 ...
- Mvc 分页栏扩展方法
using System; using System.Collections.Generic; using System.Reflection; using System.Text; using Sy ...
- C#3.0中的扩展方法
在实际应用中,开发者完成代码的编译后,除非重新编译更改后的代码,否则开发者很难在原有代码中添加新的功能. 在C#3.0中,提供了一个扩展方法的新特性,可以使得开发者在编译后的程序集里边添加相关的方法, ...
- 记录C#中的扩展方法
C#中的扩展方法. 系统自带的类型,我们无法去修改: 修改源代码需要较大的精力,而且可能会带来错误: 我们只是需要一个或者较少的几个方法,修改源代码费时费力: 被扩展的类是sealed的,不能被继承: ...
- C#编程(六十一)------------LINQ中的扩展方法
原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...
- objective-C中的扩展方法与partial class
在c#中要扩展一个现有类非常easy,比方这样: ? 1 2 3 4 5 6 7 public static class Utils { public static void PrintTo ...
- C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)
C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
随机推荐
- javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现
线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...
- iOS导航栏-导航栏透明
设置一张透明图片:nav_bargound.png //导航栏背景 [self.navigationController.navigationBar setBackgroundImage:[ ...
- POJ 1325
#include<iostream> #include<stdio.h> #define MAXN 105 using namespace std; int _m[MAXN][ ...
- 神器——Chrome开发者工具(一)
这里我假设你用的是Chrome浏览器,如果恰好你做web开发,或者是比较好奇网页中的一些渲染效果并且喜欢折腾,那么你一定知道Chrome的开发者工具了.其实其他浏览器也有类似工具,比如Firefox下 ...
- kafka配置
官网:http://kafka.apache.org/ 主要有3种安装方式: 1. 单机单broker 2. 单机多broker 3. 多机多broker 1. wget http://mirror. ...
- CF 50E. Square Equation Roots
思路:这题的关键就是重复根只可能是整数. 这样先求出所有的根的数目,在减去重复的根. 代码如下: #include <iostream> #include <cstring> ...
- (转)android屏幕适配
声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息 原文作者: zhuangyujia 原文地址: http://my.eoe.cn/zhuangyujia/archiv ...
- poj 3114(强连通缩点+SPFA)
题目链接:http://poj.org/problem?id=3114 思路:题目要求很简单,就是求两点之间的花费的最短时间,不过有一个要求:如果这两个city属于同一个国家,则花费时间为0.如何判断 ...
- unity Transform Find 的用法!!!
用法: Transform Find(String name) 1.查找名为name的(transform.gameObject)直接子物体并返回该子物体的Transform属性.不能是孙子物体或更低 ...
- APM (应用性能管理)
在信息科学和系统控制领域,APM是用来监控和管理应用软件是否有效运行的.APM通过监测和分析应用的表现去保证软件应用的良好运行,APM已经商用. 基本定义 APM = Application Perf ...