c# linkedlist how to get the the element that is before the last element

£可爱£侵袭症+ 提交于 2020-01-15 12:06:41

问题


i try to implement a redo undo in my windows form application.

i build a linkedlist , every entery of the list is a class that save the state of all the elemnts in the form.

every click on the save button , insert to this list the last state of the form elements.

when the user click on undo button i want to get the entery of the list (one before the last) and load it.

i dont know what is the simple way to get this one before elemnts from the linked list ?

my code like look like:

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

回答1:


You can get the last node via LinkedList<T>.Last

// list is LinkedList<T> for some T
var last = list.Last;

and the penultimate node via LinkedListNode<T>.Previous

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

Note that this is a LinkedListNode<T> and you need to use the LinkedListNode<T>.Value property get the underlying instance of T.

Of course, you should take care to check that list is not null, and list.Last is not null (in the case of an empty list), and that list.Last.Previous is not null (in the case of a single-element list).




回答2:


@Haim, you may want to check out Krill Osenkov's Undo Framework. It makes undo/redo very easy.



来源:https://stackoverflow.com/questions/4701723/c-sharp-linkedlist-how-to-get-the-the-element-that-is-before-the-last-element

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!