为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式
为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式,代码如下:
public class DataComparer<T>:IEqualityComparer<T> where T:class
{
private Func<T, T, bool> _compareFunc; public DataComparer(Func<T,T,bool> compareFunc)
{
this._compareFunc = compareFunc;
} public bool Equals(T x, T y)
{
return this._compareFunc(x, y);
} public int GetHashCode(T obj)
{
return obj.ToString().GetHashCode();
}
}
调用如下:
dataTable.AsEnumerable().Distinct(new DataComparer<DataRow>((x, y) => return (x[] == y[] && x[] ==y[]))).CopyToDataTable();
在这里需要特别说明一下,GetHashCode方法重写时,需要使用:obj.ToString().GetHashCode(),而不能直接使用obj.GetHashCode(),原因如下(MSDN):
GetHashCode 方法可以由派生类型重写。 如果 GetHashCode 没有重写,引用类型的哈希代码通过调用基类的 Object.GetHashCode 方法计算,它基于对象的引用的哈希代码计算;有关更多信息,请参见 RuntimeHelpers.GetHashCode。 换言之,ReferenceEquals 方法返回 true 的两个对象具有相同的哈希代码。 如果值类型不重写 GetHashCode,基类的 ValueType.GetHashCode 方法使用反射计算基于类型字段的值的哈希代码。 换言之,字段有相同值的值类型有相等的哈希代码。
为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式的更多相关文章
- Java反射结合JDBC写的一个通用DAO
以前写反射只是用在了与设计模式的结合上,并没有考虑到反射可以与DAO结合.也是一个偶然的机会,被正在上培训的老师点到这个问题,才考虑到这个可能性,于是上网参考各种代码,然后自己动手开发了一个通用DAO ...
- 使用ResultSet,写了一个通用的查询方法
此方法很烂,以后优化 /** * 通用的查询方法:SELECT */ @SuppressWarnings({ "unchecked", "rawtypes" } ...
- 写了一个迷你confirm弹窗插件,有取消和确认操作处理并支持单个确认使用弹窗和锁屏禁止滚动
由于项目想精简不想用其他第三方的ui插件,又很需要像confirm等小效果来完善交互,且使用的频率也是相当的高,于是自己造了一个,省时也省力 代码已经粘贴出来,直接复制即可看到效果,高手勿喷,可以相互 ...
- PHP写的一个轻量级的DI容器类(转)
理解什么是Di/IoC,依赖注入/控制反转.两者说的是一个东西,是当下流行的一种设计模式.大致的意思就是,准备一个盒子(容器),事先将项目中可能用到的类扔进去,在项目中直接从容器中拿,也就是避免了直接 ...
- 小白写的一个ASP.NET分页控件,仅供娱乐
无聊,第一次写博客,自己动手写了一个分页控件.由于我是新手,有很多地方写得不够好,希望各位大牛多多指正.哈哈哈 /// <summary> /// 分页控件 /// </summar ...
- 《用Java写一个通用的服务器程序》01 综述
最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的协议,处理请求,返回结果.每次写新程序时都把老代码拿来,修改一下协议解析部分和业务处理部分,然后就一个 ...
- 写了个去重复文件的 PHP 脚本,
写了个去重复文件的 PHP 脚本点击打开链接 把各个零散网盘.邮箱和服务器上的文件,三台电脑上的文件收集在新硬盘里,然后清空了网络和电脑上的文件.才发现这个文件不能这里放点,那里存点,到时候不知道在哪 ...
- Tsx写一个通用的button组件
一年又要到年底了,vue3.0都已经出来了,我们也不能一直还停留在过去的js中,是时候学习并且在项目中使用一下Ts了. 如果说jsx是基于js的话,那么tsx就是基于typescript的 废话也不多 ...
- 我写的一个ExcelHelper通用类,可用于读取或生成数据
读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三 ...
随机推荐
- Marza Gift for GDC 2016
这个帖子还是用中文写了,主要是面向国内. 这是一个趋势,就是基于UE.Unity这些日趋完善的游戏引擎以及编辑器制作便宜的3D动画.国内有<超黑学院>这种为代表,还有其他许多国漫,勉强能耐 ...
- spring和ehcache整合,实现基于注解的缓存实现
要实现基于注解的缓存实现,要求Spring的版本在3.1或以上版本. 首先需要在spring的配置文件中添加对缓存注解的实现: <?xml version="1.0" enc ...
- 【最新图文教程】WinCE5.0中文模拟器SDK(VS2008)的配置
http://www.blogbus.com/antiblood-logs/204402631.html 经过几天的查找,终于找到了一篇文章是讲VS2008 怎么集成wince5.0 的模拟器的,这里 ...
- Codeforces Round #379 (Div. 2) D. Anton and Chess 水题
D. Anton and Chess 题目连接: http://codeforces.com/contest/734/problem/D Description Anton likes to play ...
- MVC使用基架添加控制器出现的错误:无法检索XXX的元数据
环境 vs2012 框架 mvc3 数据库 sqlservercompact4.0 出现的错误如下: “ ---------------------------Microsoft Visual St ...
- 删除数据报ORA-00600: internal error code, arguments: [ktbesc_plugged]
Oracle在删除数据是以下错误: ORA-00600: internal error code, arguments: [ktbesc_plugged], [], [], [], [], [], [ ...
- 菜鸟译文(三)——JDK6和JDK7中substring()方法的对比
substring(int beginIndex, int endIndex)方法在JDK6和JDK7中是不同的.了解他们的区别可以让我们更好的使用这个方法.方便起见,以下用substring() 代 ...
- TP收集一些可以用的资源
http://www.thinkphp.cn/code/2184.html UI http://www.thinkphp.cn/code/2158.html 报名 http://www.th ...
- Mac Jenkins 权限问题
在官网下载dmg安装包,安装完毕即可在本机搭建jenkins的工作.但是jenkins不会用本地的用户去构建,任何创建的文件都是“jenkins”用户所有,这会造成很多权限问题,无法调用自己写的脚本, ...
- 我爱免费之FreeFileSync文件夹同步软件
因为项目需求用到FreeFileSync文件夹同步软件,这个软件好在免费.易用.功能强,我真的是大爱这种软件.http://freefilesync.com/ 可以下载免费软件,有需要的朋友,大可以一 ...