C# c linkedlist如何获取位于最后一个元素之前的元素的
我尝试在windows窗体应用程序中实现重做撤消 我构建了一个linkedlist,列表中的每个条目都是一个类,用于保存表单中所有元素的状态 每次单击“保存”按钮,都会在此列表中插入表单元素的最后状态 当用户单击“撤消”按钮时,我希望在最后一个按钮之前获得列表的输入 然后加载它 我不知道在链表中的元素之前得到这个的简单方法是什么 我的代码看起来像:C# c linkedlist如何获取位于最后一个元素之前的元素的,c#,linked-list,C#,Linked List,我尝试在windows窗体应用程序中实现重做撤消 我构建了一个linkedlist,列表中的每个条目都是一个类,用于保存表单中所有元素的状态 每次单击“保存”按钮,都会在此列表中插入表单元素的最后状态 当用户单击“撤消”按钮时,我希望在最后一个按钮之前获得列表的输入 然后加载它 我不知道在链表中的元素之前得到这个的简单方法是什么 我的代码看起来像: public class SaveState { public int comboBox1; publi
public class SaveState {
public int comboBox1;
public int comboBox2;
..........
public SaveState() {
.......
}
}
LinkedList<SaveState> RedoUndo = new LinkedList<SaveState>();
# in save function
var this_state = new SaveState();
this_state = getAllState();
RedoUndo.AddLast(this_state);
# when click undo
var cur_state = new SaveState();
# this lines dont work !!!!!!!!!
int get = RedoUndo.Count - 1;
cur_state = RedoUndo.Find(get);
setAllState(cur_state);
您可以通过获取最后一个节点 请注意,这是一个,您需要使用属性获取T的底层实例
当然,您应该注意检查列表是否不为空,如果列表为空,则检查list.Last是否为空,如果列表为单元素列表,则检查list.Last.Previous是否为空。您可以通过 请注意,这是一个,您需要使用属性获取T的底层实例
当然,您应该注意检查列表是否为空,如果列表为空,则list.Last不为空,如果列表为单元素列表,则list.Last.Previous不为空。@Haim,您可能需要检查Krill Osenkov的。这使得撤销/重做非常容易。@Haim,你可能想看看磷虾奥森科夫的。它使撤消/重做变得非常容易。为什么不使用堆栈而不是链表?为什么不使用堆栈而不是链表?
// list is LinkedList<T> for some T
var last = list.Last;
var penultimate = last.Previous; // or list.Last.Previous;