2015-10-21 5 views
1

Я создал операцию отмены, чтобы установить текущее значение в предыдущее, которое было в списке. Это достигается путем удаления самого последнего индекса из списка и установки значения в значение, которое стоит за ним. В настоящее время он работает, когда нет значения в списке при инициализации, а также если в списке больше одного значения.Операция отмены отменена при повторном использовании

Код, как он работает, когда в массиве имеется хотя бы один индекс, как это делают предыдущие модульные тесты.

Проблема возникает, когда я пытаюсь передать 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(); 
     } 

    } 

Может кто-то смотрит на это с свежими глазами, указывают на возможное решение, но не является фиксированной реализации, как мне нужно исправить об осуществлении себя.

+4

Я предлагаю использовать 'Stack ' для хранения операций. Вы должны прочитать структуру данных Stack. – andrewjs

+1

Вы пытаетесь проиндексировать элемент в списке, который вы уже удалили. Kaboom, когда в списке было 1 элемент. Переместите вызов RemoveAt() в нижнюю часть. –

+0

@ Спасибо, спасибо, он работает сейчас :) – IgnisSnowman

ответ

-1

Вы можете контролировать, что ваш список не пуст, прежде чем получить значение: list.Count == 0 или! List.Any().

Смежные вопросы