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());
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架