我有一个表单,用户可以使用DataGrid修改对象集合。当窗体打开时,我创建一个原始集合的深层副本,如果按下取消按钮,我只是丢弃该副本。
问题是,当确定按钮
- 修改现有对象的属性
- 已删除现有物件。
- 现有物件已重新排序。
由于我需要保留原始引用,因此我无法清除集合并添加修改的项目。
你知道一个简单的算法可以同步两个集合像这样?
我使用C#3.5,所以LINQ是可用的。
解决方案我刚刚为我正在开发的项目制定了以下算法,我认为它符合您的要求。它遵循以下步骤:
此方法维护新订单并重复使用原始参考但要求您的对象具有唯一的标识符。我正在使用一个Guid。
var originalPersons = m_originalList.ToList m_originalList.Clear(); foreach(var modifiedPerson in m_modifiedList) { var originalPerson = originalPersons.FirstOrDefault(c => c.ID == modifiedPerson.ID); if(originalPerson == null) m_originalList.Add(modifiedPerson); else { m_originalList.Add(originalPerson); originalPerson.Document = modifiedPerson.Document; originalPerson.Name = modifiedPerson.Name; ... } }祝你好运。 / p>
I have a form where users can modify a collection of objects using a DataGrid. When the form is opened I create a deep copy of the original collection and if the Cancel button is pressed I just discard that copy.
The problem is that when the OK button is pressed I have to reconcile the changes which might be:
- Modified properties of existing objects
- New objects added to any place in the collection.
- Existing objects removed.
- Existing objects re-ordered.
Since I need to keep the original references I can't just clear the collection and add the modified items.
Do you know a simple algorithm that would synchronize two collections like this?
I'm using C# 3.5 so LINQ is available.
解决方案I just worked out the following algorithm for a project I'm working on and I think it complies with your requirements. It follows this steps:
This method maintains the new order and reuses the original references but requires that your objects have an unique identifier. I'm using a Guid for that.
var originalPersons = m_originalList.ToList(); m_originalList.Clear(); foreach (var modifiedPerson in m_modifiedList) { var originalPerson = originalPersons.FirstOrDefault(c => c.ID == modifiedPerson.ID); if (originalPerson == null) m_originalList.Add(modifiedPerson); else { m_originalList.Add(originalPerson); originalPerson.Document = modifiedPerson.Document; originalPerson.Name = modifiedPerson.Name; ... } }Good luck.
更多推荐
协调两个对象集合
发布评论