热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#List集合中Contains方法失效的解决方案

在处理C#代码时,遇到了一个棘手的问题:尽管实体对象已成功添加到List集合中,但使用Contains方法检测时却总是返回false。本文将详细探讨这一问题的原因及解决方案,并提供更专业的替代方法。

在最近的一次代码调试过程中,我遇到了一个令人困惑的问题:明明已经通过List.Add(entity)将实体对象添加到了集合中,但在调用List.Contains(entity)时,结果却始终为false。

经过深入研究,我发现这主要是因为Contains方法默认使用引用比较(Reference Equality),即只有当两个对象在内存中的地址相同时才会认为它们是相同的。对于自定义类的对象,即使属性值完全相同,它们的引用地址也不同,因此Contains会返回false。

为了解决这个问题,可以重写实体类的equalsGetHashCode方法,或者使用Lambda表达式进行属性级别的比较。以下是一个示例代码:

public class Entity {     public int Id { get; set; }     public string Name { get; set; }     public override bool Equals(object obj) {         if (obj == null || GetType() != obj.GetType()) return false;         var entity = (Entity)obj;         return this.Id == entity.Id && this.Name == entity.Name;     }     public override int GetHashCode() {         return HashCode.Combine(Id, Name);     } }

如果不想重写这些方法,可以使用List.Exists或LINQ来代替Contains方法,以确保基于属性的比较:

bool flag = list.Exists(o => o.Id == entity.Id); if (!flag) {     list.Add(entity); }

希望以上内容能帮助大家更好地理解和解决类似问题。如有其他更好的方案,欢迎交流讨论。


推荐阅读
author-avatar
玲玲0308baby
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有