当前位置: 首页 > article >正文

C# 比较两个集合和比较对象

1、比较集合

/// <summary>
/// 比较两个集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list1"></param>
/// <param name="list2"></param>
/// <returns></returns>
public static bool EqualList<T>(this List<T> list1, List<T> list2)
{
    return list1 == null && list2 == null || list1 != null && list1.SequenceEqual(list2);
}

2、比较对象,对象实现IEquatable接口

public class Model: IEquatable<Model>
{
    public int Id { get; set; }

    public string Name { get; set; }

    public List<string> List { get; set; }

    public bool Equals(Model obj)
    {
        //this非空,obj如果为空,则返回false
        if (ReferenceEquals(null, obj)) return false;

        //如果为同一对象,必然相等
        if (ReferenceEquals(this, obj)) return true;

        //如果类型不同,则必然不相等
        if (obj.GetType() != GetType()) return false;

        //对比各个字段值
        if (!Equals(Id, obj.Id) || !Equals(Name, obj.Name) || !List.EqualList(obj.List))
            return false;

        //如果基类不是从Object继承,需要调用base.Equals(other)
        //如果从Object继承,直接返回true
        return true;
    }

    public override int GetHashCode()
    {
        return StringComparer.InvariantCulture.GetHashCode(Id);
    }
}

http://www.kler.cn/news/351122.html

相关文章:

  • Redis的6.0以上为啥又支持多线程
  • Eclipse Java 构建路径
  • 【Origin科技绘图】最新Origin2024中文版软件安装教程
  • 《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优
  • R语言建模线性回归
  • envoyFilter导致的webSockets协议无法正常工作
  • 【项目经验分享】Stable Diffusion生成式扩散模型毕业设计项目案例定制
  • web1.0,web2.0,web3.0 有什么区别 详解
  • 4.7 大数据应用场景
  • O2OA结合备份脚本和定时任务进行数据库的备份,我们以MySQL数据库为例
  • 单片机(学习)2024.10.15
  • AI绘画:手把手带你Stable Diffusion从零开始安装部署!
  • 解决 vscode 占据 c 盘过大的问题的设置
  • 二、Thread常见的方法
  • ssm基于javaweb的数学竞赛网站的设计与实现+vue
  • 高可用架构设计:确保服务持续在线
  • Java常用类和基础API
  • 算法-二叉树展开单链表
  • 怎么给PPT文件设置文字动画效果,提高美观度
  • 【智能大数据分析 | 实验三】Storm实验:实时WordCountTopology
  • 3.Node.js FS模块(File system)
  • 【scene_manager】与 MoveIt 机器人的规划场景进行交互
  • 2024了,传统行业转行AI,可不可行?
  • 网络编程-UDP以及数据库mysql
  • Linux服务器启动应用缓慢的解决方案
  • 书籍推荐:《从零构建大型语言模型》附免费PDF下载