c# - 比较具有可能已更改的相同对象的 2 个列表
问题描述
我有一堂课:
[Serializable]
public class MyObject
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
而且我有扩展方法,如果对象已更改,则返回:
public static bool IsChanged(this MyObject original, MyObject other)
{
if (original == null || other == null)
return false;
if (original.Id != other.Id)
return false;
if (original.Name != other.Name ||
original.Description != other.Description)
{
return true;
}
return false;
}
然后我得到我的对象列表并制作列表的副本,例如:
items = GetMyObjects();
copy = items.DeepCopy();
DeepCopy
是一种扩展方法,它使用复制对象,BinaryFormatter
以便列表的副本包含新实例而不是引用。
然后,我更改列表中的项目(即它们的名称和/或描述)items
,并检查我所做的更改的项目:
var changed = items.Where(x => copy.Any(x2 => x.IsChanged(x2)));
但是,计数changed
始终是原始列表中的项目总数,无论任何项目如何或是否发生更改。
我究竟做错了什么?
解决方案
基本上你正在做的是检查副本中是否有任何项目与项目列表中的第 i 个项目不同。因此,如果至少有 1 个项目具有不同的名称或描述,则更改项目的计数器将增加,结果将是项目总数。
推荐阅读
- continuous-integration - 大厅:on_failure 的多个步骤
- powershell - Splat 参数到 cmdlet 而不展开数组
- oracle-apex-5.1 - 从 APEX 设计器访问 APEX_APPLICATION.G_Fxx 值
- android - 房间获取所有项目产生 ArrayIndexOutOfBoundsException
- javascript - 在 vue.js 中寻址到 css 时编译失败
- python - 将纬度经度转换为米/英尺(python中的haversine)
- angular - Angular 6 - 提交后重置表单不起作用
- phpmyadmin - 使用 sql 文件的 phpMyAdmin 数据库更新
- ios - 无法使用 Nativescript 3.4.3 构建 .ipa
- java - 使用单选按钮更新 ListView 适配器输入