c#linkedlist如何获取最后一个元素之前的元素

时间:2011-01-15 19:35:12

标签: c# linked-list

我尝试在我的Windows窗体应用程序中实现重做撤消。

我建立了一个链表,列表中的每个输入都是一个保存表单中所有元素状态的类。

每次单击“保存”按钮,将此表单的最后一个状态插入此列表。

当用户点击撤销按钮时,我想获得列表的输入(一个在最后一个之前) 并加载它。

我不知道在链接列表的元素之前获取这个的简单方法是什么?

我的代码如下所示:

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

2 个答案:

答案 0 :(得分:5)

您可以通过LinkedList<T>.Last

获取最后一个节点
// list is LinkedList<T> for some T
var last = list.Last;

和倒数第二个节点通过LinkedListNode<T>.Previous

var penultimate = last.Previous; // or list.Last.Previous;

请注意,这是LinkedListNode<T>,您需要使用LinkedListNode<T>.Value属性获取T的基础实例。

当然,您应该注意检查list是否为空,list.Last不为空(如果是空列表),并且list.Last.Previous不是null(在单元素列表的情况下)。

答案 1 :(得分:1)

@Haim,你可能想查看Krill Osenkov的Undo Framework。它使撤消/重做非常容易。