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

C# 当返回“取消”对话框结果时,如何从列表中删除对象?,c#,list,generics,C#,List,Generics,我正在编写一个C#forms应用程序,其中有许多ListList。我有很多表单可以在这些列表中添加和删除对象。如果用户按下“取消”按钮,对话框结果返回为“取消”,那么从表单中删除添加到列表中的数据的最佳方法是什么 我应该事先对所有列表进行“快照”,然后恢复列表,还是有更好的方法 所有列表都继承自ICustomObject接口,并且这些列表都存储在一个位置。它们并不特定于每个表单,但每个表单只能添加和编辑特定列表中的项目 谢谢。不要直接使用列表,您可以考虑创建一个具有某种事务逻辑的派生类,这样您就

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

我应该事先对所有列表进行“快照”,然后恢复列表,还是有更好的方法

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


谢谢。

不要直接使用
列表
,您可以考虑创建一个具有某种事务逻辑的派生类,这样您就可以
提交
回滚
更改。大概是这样的:

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();
    }        
}
公共事务列表:列表{
私有列表变更列表;
公共无效附加项(T项){
变更列表。添加(项目);
}
公共无效提交(){
base.AddRange(changesList);
changesList.Clear();
}
公共无效回滚(){
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>; 
}
var list1=newlist(){1,2,3};
var list2=新列表(){“Abc”、“Def”、“Ghi”};
object[]tempData=new[]{list1.ToList(),list2.ToList()};
//... 用户更改列表1、列表2中的某些内容。。。
清单1.添加(12);清单1.移除(3);
清单2.删除(“Def”);
如果(取消)
{
list1=tempData[0]作为列表;
list2=tempData[1]作为列表;
}

每个表单都有特定的列表吗?或者在表单中使用相同的列表吗?我不建议从
列表中派生,我更喜欢组合。对我来说,事务行为适用于已经存在的列表,它并不代表一种特殊的列表行为。它也没有以任何方式修改列表行为,只是添加了额外的功能。谢谢。这就是我现在使用的方法。