【问题标题】:Simple way of comparing two Lists in C#在 C# 中比较两个列表的简单方法
【发布时间】:2014-05-19 12:02:00
【问题描述】:

我正在寻找一种简化的方法来比较 C# 中的列表。目前我正在做的事情如下: 1.发起原始列表 2. 启动更新列表 3.使用Union、Except等手动比较,得出差异。

有问题的应用程序是使用 MVVM 实现的 Windows Phone 8.1 应用程序。我正在读取手机存储上的文件,将 StorageFiles 解析为自定义类,然后进行比较。鉴于我不能直接做,到目前为止我是手动做的,这非常慢。

我正在寻找的是:

  • 获取新物品(很简单)
  • 获取更新的项目(很难!)

如果列表中内置了一个基本的 CRUD 环境,那就太好了......

无论如何,问题仍然相同 - 是否有一种简单/简单的方法可以做我现在的工作,还是我应该坚持使用有效的解决方案?

【问题讨论】:

  • “比较”是什么意思?比较相应的索引?比较参考的存在?显示代码。
  • 比较列表的内容,基本判断出新旧的区别(所以通俗点说,就是指出新项、变更项、删除项、未变更项)。
  • 定义“指出新项、更改项、删除项和未更改项”。您想比较参考文献吗?
  • 如果我的描述不清楚,我很抱歉。是的,我希望这样做。

标签: c# wpf list mvvm comparison


【解决方案1】:

对于更新实现一个 TimeStamp 属性,该属性在任何属性更改时都会更新。
然后你可以只比较 TimeSpamp 属性。

【讨论】:

  • 好的,在运行了一些测试之后,很明显,创建两个单独的列表会导致创建不同的引用。所以时间戳方法不起作用,因为两个列表包含不同的引用,而对象本身可以相同。
  • 所以你比较两个引用到同一个对象的差异。时间戳有效 - 对同一对象的两次引用与每个属性一样。
  • 没有。正如我所说,这两个列表包含不同的引用、不同的对象。我所做的如下: 1. 获取文件列表 2. 从文件列表中创建自定义对象(而对象具有对所述文件的引用,因为我正在使用 WP8.1,它是一个 StorageFile) 3.将自定义对象添加到列表 4. 比较列表。
  • 并且随着自定义对象稍后填充有关文件的信息(例如大小、创建日期、其他元数据),这些对象是分开的。我能想到的最佳解决方案是使用 ObservableCollection 类的自定义实现,在其中我重写了 Compare 函数以逐个元素地检查差异,但这是一项非常乏味的工作,我希望存在一个更简单的解决方案。
  • 它很乱,但这是我迄今为止找到的唯一解决方案,用于填充具有自定义关系的文件库(它是一个音乐库 - 音乐文件被解析为 Song 对象,Artist 和 Album 类是创建等。我正在比较两个歌曲列表:当前使用的歌曲和要加载的歌曲)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多