我创建了一个撤消操作,将当前值设置为列表中的前一个值。它通过从列表中删除最新索引并将值设置为其后面的值来实现此目的。目前,当初始化时列表中没有值,以及列表中有多个值时,它可以正常工作。
代码在数组中至少有一个索引时的工作方式,因为之前的单元测试通过了这个。
问题发生在我尝试在命令运行两次后,在列表中的最后一项也被删除后,要传递InvalidOperationException。所以添加(5) - >撤消() - > Undo()给出一个例子。还要更改valDict.Count中的if语句> 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();
}
}
有人可以用新眼睛看这个,指出一个可能的解决方案,但不是一个固定的实现,因为我需要自己修复实现。
答案 0 :(得分:-1)
在获取值之前,您可以控制列表不为空:list.Count == 0,或!list.Any()。