返回取消对话框结果时,如何从列表中删除对象?

时间:2015-07-22 12:07:25

标签: c# list generics

我正在编写一个C#表单应用程序,其中有许多List<T>列表。我有许多表单可以添加和删除这些列表中的对象。如果用户按下取消按钮,并且对话框结果返回为取消,那么从表单中删除添加到列表中的数据的最佳方法是什么?

我应该拍摄&#39;快照&#39;预先列出所有列表,然后恢复列表,还是有更好的方法?

所有列表都继承自ICustomObject接口,并且这些列表都存储在一个位置。它们并非特定于每个表单,但每个表单只能添加和编辑某些列表中的项目。

感谢。

2 个答案:

答案 0 :(得分:2)

您可以考虑创建一个具有某种事务逻辑的派生类,而不是直接使用List<T>,这样您就可以CommitRollback进行更改。像这样:

public TransactionList<T> : List<T> {
    private List<T> changesList;

    public void AddItem(T item) {
        changesList.Add(item);
    }

    public void Commit() {
        base.AddRange(changesList);
        changesList.Clear();
    }
    public void Rollback() {
        changesList.Clear();
    }        
}

当然,如果需要,您还需要添加用于修改或删除列表项的更多实现。这段代码只是一个例子,说明如何为添加对象案例执行此操作。

答案 1 :(得分:0)

如果用户按下取消,我可能会创建所有列表的备份并还原所有更改。

var list1 = new List<int>() { 1, 2, 3};
var list2 = new List<string>() { "Abc", "Def", "Ghi"};

object[] tempData = new[] { list1.ToList(), list2.ToList() };

//... user changes something in list1, list2 ...
list1.Add(12); list1.Remove(3);
list2.Remove("Def");

if(cancel)
{
   list1 = tempData[0] as List<int>;
   list2 = tempData[1] as List<string>; 
}