首页 > 编程语言 >C# 比较两个集合和比较对象

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

时间:2024-10-11 11:04:44浏览次数:1  
标签:return C# list1 List public 集合 obj false 比较

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);
    }
}

 

 

标签:return,C#,list1,List,public,集合,obj,false,比较
From: https://www.cnblogs.com/log9527blog/p/18457970

相关文章

  • Ubuntu系统 用docker安装jenkins
    1.1.1服务器准备如果刚买的服务器是ubuntu一开始默认用户是ubuntu需要在Ubuntu云服务器上使用root用户登录实例1.设置root密码sudopasswdroot输入两次密码返回一下内容表示密码设置成功passwd:passwordupdatedsuccessfully执行以下命令,打开sshd_config配置文件......
  • C#调用C++ dll教程
    C#调用C++dll教程文章目录一、创建C++dll项目二、C#程序员调用C++dll三、C++与C#数据类型对应基本数据类型对应表C++指针类型与C#类型在使用C#开发客户端时,有时需要调用C++dll,本篇博客来介绍C#程序如何调用C++dll。一、创建C++dll项目首先使用VS2022创建C++d......
  • avue-crud常用配置说明
    avue-crud 是一个基于Vue.js的开源组件库,用于快速构建表单、表格和数据管理的前端界面。它简化了常见的CRUD(创建、读取、更新、删除)操作的开发过程,特别适用于管理系统或后台管理平台。它是一个基于Element-plus低代码前端框架,它使用JSON配置来生成页面,可以减少页面开发工作......
  • 最新WeCam虚拟摄像头无人直播神器,支持全平台自动抽帧硬改直播间
    功能介绍:wecam专注无人直播......
  • 最新WeCam虚拟摄像头无人直播神器,支持全平台自动抽帧硬改直播间
    功能介绍:wecam专注无人直播......
  • CSS篇二:其他选择器与权重/范围
    一、其他选择器简单聊聊:篇一提到的三种基础选择器其实并不能完全覆盖商业项目的开发场景,所以其他类型选择器的使用频率也非常高,所以还是建议记住,避免某一场景下为难。1、通配选择器简述:使用较少,优缺点都很明显,优→统一设置;缺→样式覆盖,降低代码执行效率。推荐度:一星2、组......
  • ArgoCD + ArgoCD Image Updater 部署实现
    部署思路踩坑整理1、ArgoCD和ArgoCDImageUpdater是2个不同的程序。"ArgoCDImageUpdater小工具"没有集成在ArgoCD中需要单独部署。2、单独的ArgoCD能够实现基于git仓库变更作为应用部署的事实来源[参考子页:argocd根据镜像tag变化实现自动发布的2种方式];ArgoCD+"ArgoCD......
  • C# await 高级用法
    本文告诉大家await的高级用法,包括底层原理。昨天看到太子写了一段代码,我开始觉得他修改了编译器,要不然下面的代码怎么可以编译通过await"林德熙逗比";需要知道,基本可以添加await都是可以等待的类型,如Task。如果一个类需要可以被等待,那么这个类必须满足以下条件类里有一个Ge......
  • Navicat Premium v17 中文注册版
    Navicat是一款强大的数据库管理和开发工具,它支持多种数据库系统,包括MySQL、MariaDB、Oracle、PostgreSQL、SQLite和SQLServer等。Navicat提供了一个直观的用户界面,使得用户可以轻松地创建、组织、访问和共享数据库信息。该版本已注册,可以使用全部功能。使用说明:1、......
  • AIGC算法3:Attention及其变体
    1.AttentionAttention是Transformer的核心部分,Attention机制帮助模型进行信息筛选,通过Q,K,V,对信息进行加工1.1attention计算公式1.2attention计算流程1.3SoftmaxattentionSelf-attention的Q,K,V同源,都是输入序列X的线性变化,在实际生产过程中K与V相同。F为token维度,DM为投影维......