C# 根据部分属性来判断俩个对象是否相同
根据部分属性来判断俩个对象是否相同
代码是第一版本 可能不牢固 有问题请反馈一下 3QU
效果图:
1 public static class CustomExpand 2 { 3 public static bool CustomEquals<T>(this T t, T t1, params Expression<Func<T, object>>[] ex) where T : class 4 { 5 List<string> memberList = new List<string>(); 6 foreach (var item in ex) 7 { 8 string memberName = (GetMemberExpression(item.Body)?.Member.Name); 9 if (!string.IsNullOrEmpty(memberName)) 10 { 11 memberList.Add(memberName); 12 } 13 } 14 Type type = t.GetType(); 15 while (memberList.Count > 0) 16 { 17 PropertyInfo propertyInfo = type.GetProperty(memberList[0]); 18 switch (propertyInfo.PropertyType.BaseType.FullName) 19 { 20 case "System.ValueType": 21 if (propertyInfo.GetValue(t, null)?.ToString() != propertyInfo.GetValue(t1, null)?.ToString()) 22 { 23 return false; 24 } 25 break; 26 case "System.Object": 27 if (SerializerHelper.ToJson(propertyInfo.GetValue(t, null)) != SerializerHelper.ToJson(propertyInfo.GetValue(t1, null))) 28 { 29 return false; 30 } 31 break; 32 default: 33 throw new Exception($"类型:{propertyInfo.PropertyType.BaseType.FullName} 未作处理"); 34 break; 35 } 36 memberList.RemoveAt(0); 37 } 38 return true; 39 } 40 public static MemberExpression GetMemberExpression(Expression expression) 41 { 42 if (expression is MemberExpression) 43 { 44 return expression as MemberExpression; 45 } 46 if (expression is UnaryExpression) 47 { 48 return GetMemberExpression(((UnaryExpression)expression).Operand); 49 } 50 return null; 51 } 52 }
现在的努力只是为了更好的将来,将来你一定不会后悔你现在的努力。一起加油吧!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?