博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# List对于自定义对象的比较判断
阅读量:6941 次
发布时间:2019-06-27

本文共 1286 字,大约阅读时间需要 4 分钟。

 

  实际开发中,我们经常会把同类型的一系列对象封装到List集合中,当我们有需要在封装对象到List集合中时,排除重复的对象,这时直接使用:

1
2
3
4
if
(!List.Contains(obj))
{
    
List.Add(bj);
}

   在使用List对象,当T为自定义类型时,使用Contain方法将导致错误的返回结果。List.Contains(obj)比较的是:原来List集合中的对象的储存地址和当前需要添加对象obj在堆中储存的地址 ,所以即便有两个对象相等,但是它们储存的地址不同,所以List.Contains仍然返回false。下面主要使用如下两种方法来解决该问题。

 

1、实现 IEqualityComparer接口

public class PopupComparer : IEqualityComparer
> { public static PopupComparer Default = new PopupComparer(); #region IEqualityComparer
成员 public bool Equals(KeyValuePair
x, KeyValuePair
y) { return x.Key.Equals(y.Key); } public int GetHashCode(KeyValuePair
obj) { return obj.GetHashCode(); } #endregion }

使用

if (!lt.Contains
>(kv, PopupComparer.Default))   lt.Add(kv); else   Console.ReadKey();

2、重写对象的EqualsGetHashCode方法

List.Contains(obj)调用的是obj对象对应的类的Equals()方法,我们可以按需要重写这个方法和GetHashCode()方法,即可按自己的需求来定义Contains()比较方式。

 
View Code

 

 

 

参考文章

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7839210.html,如需转载请自行联系原作者
你可能感兴趣的文章
Sharepoint学习笔记—Ribbon系列-- 1. Ribbon的架构
查看>>
队列的优先级
查看>>
Android之短信发送器
查看>>
交换机与路由器的区别
查看>>
SQL函数---SQL COUNT()
查看>>
对${ZSH_VERSION+set}的验证
查看>>
TAM安装26-
查看>>
For my one year Anniversary to India
查看>>
c#调用存储过程两种方法
查看>>
谈面试下
查看>>
Struts2和Spring3 MVC的区别说明
查看>>
Discuz!NT - 帖子列表IE8/9下js效果bug修复
查看>>
10个非常有用的jQuery360度旋转影像插件推荐
查看>>
WAL-E Disaster Recovery
查看>>
掌握这些电脑知识,你会玩得很无耻
查看>>
批处理作业调度-回溯法
查看>>
Linux常用命令 (包含Apache, MySQL)
查看>>
admob 广告增加
查看>>
客户/服务器程序设计范式
查看>>
由一个Xml序列化操作看mscorlib.dll 2.0、4.0 String的Trim方法实现
查看>>