一、List的扩展
前言
List的三个扩展方法
1.处理符合in()格式的扩展方法
2.处理符合SelectListItem类型的扩展方法(SelectListItem类型是下拉框要用到的类型)
3.Distinct方法的进一步扩展(如果列表里的值是对象,Distinct就不能通过对象里的字段进行筛选,扩展之后就可以实现)
操作
第一个扩展方法:处理符合in()格式的扩展方法
第一步,这里只是提供整数、字符串两种格式的扩展方法。
处理字符串的扩展方法,代码如下:
public static string ToStringList(this IEnumerable<string> listItems)
{
string strArray = "";
foreach (var item in listItems)
{
strArray += string.Format(",'{0}'", item);
}
if (strArray.Length > )
{
strArray = strArray.Substring();
}
return strArray;
}
处理整数的扩展方法,代码如下:
public static string ToStringList(this IEnumerable<int> listItems)
{
string strArray = "";
foreach (var item in listItems)
{
strArray += string.Format(",{0}", item);
}
if (strArray.Length > )
{
strArray = strArray.Substring();
}
return strArray;
}
第二步,扩展方法以及实现,接下来定义一个List,代码如下:
List<Studens> list = new List<Studens>();
for (int i = ; i < ; i++)
{
Studens studens = new Studens()
{
Id=+i,
Age = +i,
Name = "大侠"
};
list.Add(studens);
}
第三步,实现,代码如下:
var age = list.Select(c => c.Age);
string strAge = age.ToStringList();//扩展方法ToStringList的用法
var name = list.Select(c => c.Name);
string strName = name.ToStringList();//扩展方法ToStringList的用法
注意
说到注意就一定得注意,不然就会吃苦。
注意:不能用参数化给in()操作符赋值,可以用字符串并接
******************第一个扩展方法介绍结束***********************
第二个扩展方法:处理符合SelectListItem类型的扩展方法
第一步:扩展方法,代码如下:
public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> reusltItems, Func<T, int> valueProperty, Func<T, string> textProperty)
{
return reusltItems.Select(c => new SelectListItem
{
Value = valueProperty(c).ToString(),
Text = textProperty(c),
}).ToList();
}
第二步:实现,代码如下:(list定义按照第一个扩展方法)
List<SelectListItem> listItme = list.ToSelectList(c => c.Id, c => c.Name);
******************第二个扩展方法介绍结束***********************
第三个扩展方法:Distinct方法的进一步扩展
第一步:定义一个类,代码如下:
public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
{
private Func<T, V> keySelector;
private IEqualityComparer<V> comparer; public CommonEqualityComparer(Func<T, V> keySelector, IEqualityComparer<V> comparer)
{
this.keySelector = keySelector;
this.comparer = comparer;
} public CommonEqualityComparer(Func<T, V> keySelector)
: this(keySelector, EqualityComparer<V>.Default)
{ } public bool Equals(T x, T y)
{
return comparer.Equals(keySelector(x), keySelector(y));
} public int GetHashCode(T obj)
{
return comparer.GetHashCode(keySelector(obj));
}
}
第二步:实现扩展方法,代码如下:
public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
{
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
} public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector, IEqualityComparer<V> comparer)
{
return source.Distinct(new CommonEqualityComparer<T, V>(keySelector, comparer));
}
第三步:实现,代码如下:(list定义按照第一个扩展方法)
var listDis = list.Distinct(p => p.Name).ToArray();
******************第三个扩展方法介绍结束***********************
结尾
在实际的开发中,扩展方法既简单又快速,还挺有规范,值得在开发中积累下来。
一、List的扩展的更多相关文章
- Asp.net Boilerplate之AbpSession扩展
当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...
- 恢复SQL Server被误删除的数据(再扩展)
恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- Dapper扩展之~~~Dapper.Contrib
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...
- ExtJS 4.2 Date组件扩展:添加清除按钮
ExtJS中除了提供丰富的组件外,我们还可以扩展他的组件. 在这里,我们将在Date日期组件上添加一个[清除]按钮,用于此组件已选中值的清除. 目录 1. Date组件介绍 2. 主要代码说明 3. ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- Hawk 6. 编译和扩展开发
Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...
- 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇
最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...
随机推荐
- 【加解密】关于DES加密算法的JAVA加密代码及C#解密代码
JAVA加密: package webdomain; import java.security.Key; import java.security.spec.AlgorithmParameterSpe ...
- 反汇编一个简单的C程序
一.实验截图 二.汇编代码分析: cpu首先执行main函数里的pushl %ebp和movl %esp %ebp.如下图: esp减去4就是向上移动4位到1,如下图: 把1赋值给esp,如下图: c ...
- AI钻石风格logo教程
最终图像 与往常一样,这是我们要创建的最终图像: Step 1 按Ctrl+ N创建新文档.从单位下拉菜单中选择像素,在宽度和高度框中输入600,然后单击高级按钮.选择RGB,屏幕(72 PPI),并 ...
- codejam环境熟悉—Minimum Scalar Product
今天准备熟悉一下codejam的在线编程,为google的笔试做准备,因此按照codejam上对新手的建议,先用了一个简单的题目来弄清楚流程.记录一下需要注意的地方. 1.输入输出 输入输出重定位 ...
- STL源码剖析读书笔记--第6章&第7章--算法与仿函数
老实说,这两章内容还蛮多的,但是其实在应用中一点点了解比较好.所以我决定这两张在以后使用过程中零零散散地总结,这个时候就说些基本概念好了.实际上,这两个STL组件都及其重要,我不详述一方面是自己偷懒, ...
- 【转】从零开始编写自己的C#框架(7)——需求分析
转自:http://www.cnblogs.com/EmptyFS/p/3653934.html 本章内容虽然叫“需求分析”,实际上关于具体的需求分析操作步骤并没有深入去写,因为细化的话那将是一本厚厚 ...
- A JavaFX based Game Authoring System
http://www.mirkosertic.de/doku.php/javastuff/javafxgameauthoring ——————————————————————————————————— ...
- MSSQL 2005数据库可疑状态
今天早上打开进销存,提示链接失败,经过检查参数,网络.端口等各种情况,均没有发现问题,最后检查数据库本事的问题. 通过studio进去发现我的进销存数据变成了(可疑)状态,随机百度修复方法,修复方法还 ...
- EIGRP默认路由分发的四种方法
方式一:重发布静态 R2(config)#ip route 0.0.0.0 0.0.0.0 s1/1 R2(config)#router eig 10 R2(config-router)#redist ...
- Mac配置JAVA_HOME
首先打开终端,输入/usr/libexec/java_home,看到 /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home 说 ...