比较两个对象是否相等

简介:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace ObjectCompare
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    static class Program
    {
        static void Main(string[] args)
        {
            CompareObjectTest();
        }
        /// <summary>
        /// 测试方法
        /// </summary>
        public static void CompareObjectTest()
        {
            Person FirstPerson = new Person() { Name = "张三", Age = 20 };
            Person SecondPerson = new Person() { Name = "张三", Age = 21 };
            bool flag = FirstPerson.ToString().Equals(SecondPerson.ToString());
            Console.WriteLine(flag);
            bool actua = FirstPerson.CompareWith(SecondPerson);
            Console.WriteLine(actua);
            Console.Read();
        }

        /// <summary>
        /// 将对象序列化为字符串
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string Serialize(this object obj)
        {
            if (null == obj)
                return string.Empty;
            Type type = obj.GetType();
            FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
            StringBuilder objString = new StringBuilder();
            foreach (FieldInfo field in fields)
            {
                objString.Append(field.Name + ":");
                object value = field.GetValue(obj);     //取得字段的值
                if (null != value)
                {
                    Type filedType = value.GetType();
                    //判断该字段类型是否为类,且不是string类型
                    if (filedType.IsClass && "String" != filedType.Name)
                        objString.Append(Serialize(value));
                    objString.Append(value);
                }
                objString.Append(";");
            }
            return objString.ToString();
        }

        /// <summary>
        /// 比较两个对象是否相等
        /// </summary>
        /// <param name="obj1"></param>
        /// <param name="obj2"></param>
        /// <returns></returns>
        public static bool CompareWith(this object obj1, object obj2)
        {
            if (null == obj1 || null == obj2)
                return false;
            if (obj1.GetType() != obj2.GetType())
                return false;
            return obj1.Serialize().Equals(obj2.Serialize());
        }
    }
}

目录
相关文章
|
机器学习/深度学习 Linux vr&ar
ARIMA差分自回归移动平均模型
ARIMA是**差分自回归移动平均模型**的引文缩写,其中AR表示的是自回归模型,MA表示的是移动平均模型,I表示的是差分。一般写成ARIMA(p,d,q),p是自回归阶数,q是移动平均阶数,d表示差分的次数。
2154 0
ARIMA差分自回归移动平均模型
|
存储 物联网 PyTorch
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
**Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
673 59
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
|
传感器 监控 供应链
物联网技术在智慧工地中如何应用?
物联网技术在智慧工地的应用主要包括:实时项目状况监控,通过传感器监测环境条件;人员与设备管理,利用RFID或人脸识别技术记录考勤,实时追踪工人位置;环境与安全监控,确保符合安全标准;施工效率与成本控制,优化资源分配;远程监控与智能分析,支持远程决策;材料管理与供应链优化,减少浪费;智能施工与自动化,提高施工效率。这些应用提升了工地的智能化水平,加强了安全管理,促进了建筑行业的数字化转型。
653 3
|
机器学习/深度学习 边缘计算 人工智能
深度学习在图像处理中的应用与挑战
本文旨在探讨深度学习技术在图像处理领域的应用及其面临的主要挑战。通过分析深度学习模型如卷积神经网络(CNN)在图像分类、目标检测和图像分割等任务中的表现,揭示了其在提高精度、自动化特征提取方面的巨大潜力。同时,本文指出了当前深度学习在图像处理中的数据需求、计算资源消耗、模型解释性以及对抗攻击等方面的挑战,并提出了可能的解决方向。通过综合讨论,本文强调了深度学习在推动图像处理技术进步中的重要作用,同时也呼吁更多的研究以克服现有挑战,进一步拓宽其应用前景。
|
机器学习/深度学习 人工智能 自然语言处理
NLP的原理是什么?
【10月更文挑战第8天】NLP的原理是什么?
524 0
|
JavaScript NoSQL 前端开发
使用 Node.js 和 MongoDB 构建实时聊天应用
【10月更文挑战第2天】使用 Node.js 和 MongoDB 构建实时聊天应用
|
IDE Java 测试技术
通义灵码测评报告
通义灵码测评报告
933 1
|
数据采集 JavaScript 前端开发
Vue框架的优缺点是什么
【7月更文挑战第5天】 Vue框架:组件化开发利于重用与扩展,响应式数据绑定简化状态管理;学习曲线平缓,生态系统丰富,集成便捷,且具性能优化手段。缺点包括社区规模相对小,类型支持不足(Vue 3.x改善),路由和状态管理需额外配置,SEO支持有限。随着发展,部分缺点正被克服。
463 1
|
Java Unix Shell
苹果app代码行数统计
苹果app代码行数统计
221 1
|
新零售 Cloud Native 安全
光云科技快麦ERP正式入选阿里云原生合作伙伴计划,赋能企业“新基建”
阿里云在云原生领域的投入广泛而深入,在容器、服务网格和 Serverless 等领域均有丰富的技术和产品体系,目前阿里云已经拥有国内最丰富的云原生产品家族、最全面的云原生开源贡献、最大规模的云原生应用实践、最大的云原生客户群体。
1431 89
光云科技快麦ERP正式入选阿里云原生合作伙伴计划,赋能企业“新基建”