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

Hai*_*vgi 1 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);
Run Code Online (Sandbox Code Playgroud)

jas*_*son 5

您可以通过最后一个节点获取 LinkedList<T>.Last

// list is LinkedList<T> for some T
var last = list.Last;
Run Code Online (Sandbox Code Playgroud)

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

var penultimate = last.Previous; // or list.Last.Previous;
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个LinkedListNode<T>并且您需要使用LinkedListNode<T>.Value属性获取底层实例T.

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