public void Undo() { if (undoStack.Count == 0) { return; } var state = undoStack.Pop(); redoStack.Push(stateProvider.GetState(this)); stateProvider.SetState(state); }