Я создал операцию отмены, чтобы установить текущее значение в предыдущее, которое было в списке. Это достигается путем удаления самого последнего индекса из списка и установки значения в значение, которое стоит за ним. В настоящее время он работает, когда нет значения в списке при инициализации, а также если в списке больше одного значения.Операция отмены отменена при повторном использовании
Код, как он работает, когда в массиве имеется хотя бы один индекс, как это делают предыдущие модульные тесты.
Проблема возникает, когда я пытаюсь передать InvalidOperationException, когда команда запускается дважды, после того как последний элемент в списке также был удален. поэтому добавьте (5) -> Undo() -> Undo(), чтобы привести пример. Также, изменяя оператор if из valDict.Count> 0 на значение> 0, возникает такая же ошибка.
List<int> valDict = new List<int>();
public void Undo()
{
repOp1 = "Undo";
Console.WriteLine("1: " + valDict.Count);
if (valDict.Count > 0)
{
int temp = valDict.Count - 1;
Console.WriteLine("2: " + temp);
valDict.RemoveAt(temp);
Console.WriteLine("3: " + valDict.Count);
valDict.TrimExcess();
//Below Line is flagged as the error
Value = valDict[valDict.Count-1];
}
else
{
throw new InvalidOperationException();
}
}
Может кто-то смотрит на это с свежими глазами, указывают на возможное решение, но не является фиксированной реализации, как мне нужно исправить об осуществлении себя.
Я предлагаю использовать 'Stack' для хранения операций. Вы должны прочитать структуру данных Stack. –
andrewjs
Вы пытаетесь проиндексировать элемент в списке, который вы уже удалили. Kaboom, когда в списке было 1 элемент. Переместите вызов RemoveAt() в нижнюю часть. –
@ Спасибо, спасибо, он работает сейчас :) – IgnisSnowman