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#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
随机推荐
- sql server 批量删除数据表
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Auth ...
- mybatis中:returned more than one row, where no more than one was expected.异常
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorEx ...
- NumPy的array
1.numpy包中的array数组,用于弥补列表可以存储任意的数据类型的不足,因为有时候我们需要存储某种类型的数据在数组中,这才是数组的本来内涵.我们通过向numpy.array()函数中传递pyth ...
- poj 1085 Triangle War 博弈论+记忆化搜索
思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: #include<ios ...
- Codeforces Round #337 (Div. 2) C. Harmony Analysis 数学
C. Harmony Analysis The semester is already ending, so Danil made an effort and decided to visit a ...
- C#网页采集
/// <summary> /// 返回提取数组 /// </summary> /// <param name="rex">正则</par ...
- B. Quasi Binary
开启博客园 记录codeforces程序 这个题目很简单 一个数能被最少的只包含0 ,1的数字和 如:9 = 1+1+1+1+1+1+1+1+1 10 =10 12 =11+ 1 求得是最少个数的整数 ...
- iOS开发--完整项目
完整项目 Phonetic Swift 写的一个 iOS 版的 Phonetic Contacts,功能很多,其中昵称功能非常实用,已在 GitHub 开源并上架 App Store v2ex – v ...
- C# 访问USB(HID)设备
原文:C# 访问USB(HID)设备 二话不说,直接给代码,如果您真想做这方面的东西,还是稍微研究下,没有现成的好类用,就需要自己了解其原理 //引用空间 using System; using Sy ...
- iOS 解析手势识别(Gesture Recognizers)
一.Gesture Recognizers Gesture Recognizers是在iOS3.2引入的,可以用来识别手势.简化定制视图事件处理的对象.Gesture Recognizers的基类为U ...