2015-08-25 4 views
2

Je fais un UndoRedo Functionlity pour mon application. Maintenant, sur la fonction DoAction J'ai la liste des mesures prises à Stack<UndoRedoAction> Maintenant, je veux la dernière action Taken qui sera automatiquement d'abord dans la liste pour prendre la première dans la liste que je l'ai utilisé actionList.Peek(); Maintenant, la La situation se présente est que la prochaine fois que je voulais prendre le second de la liste. Je ne sais pas comment faireVeut la prochaine pile <T> de la liste des actions

private void DoAction(Stack<UndoRedoAction> actionList, Stack<UndoRedoAction> storeList, Action<UndoRedoAction> action) 
{ 
    if (actionList.Count > 0) 
    { 
     UndoRedoAction urAction = actionList.Peek(); 
     action(urAction); 
     storeList.Push(urAction); 
    } 
} 

Répondre

4

Vous devez utiliser Stack<T>.Pop au lieu de Peek. Pop supprime le dernier élément ajouté dans la pile et le renvoie tandis que Peek renvoie le dernier élément ajouté sans le supprimer de la pile.

+0

Je n'avais jamais pensé à ça. Lemme essayer :) –

+0

Silly moi. Lors de la création du flux, j'étais conscient que je voulais supprimer le premier et c'est la raison pour laquelle j'ajoutais l'action en cours dans 'storeList' et encore une fois pour la raison de Redo. Mais j'ai oublié. Merci Votre ** 'Pop' ** a travaillé pour moi. –

+0

@MohitShrivastava Pas de problème! De rien ;) –

0

Utilisez Pop pour sûr (comme @Matias) dit.

Jetez un coup d'œil au Command Pattern car il est parfait pour obtenir une abstraction entre le code qui fait le travail et fournit une bonne base pour l'annulation.