当一个取消对话框结果返回时,我应该如何从列表中删除对象?

本文关键字:我应该 列表 对象 删除 一个 取消 返回 结果 对话框 | 更新日期: 2023-09-27 18:03:55

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

我是否应该事先对所有列表进行"快照",然后恢复列表,或者有更好的方法?

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

谢谢。

当一个取消对话框结果返回时,我应该如何从列表中删除对象?

不直接使用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();
    }        
}

当然,如果需要的话,您需要添加进一步的实现来修改或删除列表项。下面的代码只是一个示例,说明如何在添加对象的情况下完成此操作。

我可能会创建所有列表的备份,并在用户按下取消键时恢复所有更改。

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>; 
}