我正在编写一个C#表单应用程序,其中有许多List<T>
列表。我有许多表单可以添加和删除这些列表中的对象。如果用户按下取消按钮,并且对话框结果返回为取消,那么从表单中删除添加到列表中的数据的最佳方法是什么?
我应该拍摄&#39;快照&#39;预先列出所有列表,然后恢复列表,还是有更好的方法?
所有列表都继承自ICustomObject接口,并且这些列表都存储在一个位置。它们并非特定于每个表单,但每个表单只能添加和编辑某些列表中的项目。
感谢。
答案 0 :(得分:2)
您可以考虑创建一个具有某种事务逻辑的派生类,而不是直接使用List<T>
,这样您就可以Commit
或Rollback
进行更改。像这样:
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>;
}