重复使用时“撤消操作”失败

本文关键字:操作 撤消操作 失败 撤消 | 更新日期: 2023-09-27 18:18:49

我创建了一个撤销操作,将当前值设置为列表中的前一个值。它通过从列表中删除最近的索引并将值设置为其后面的值来实现这一点。目前,当初始化时列表中没有值时,以及列表中有多个值时,它都可以工作。

当数组中至少有一个索引时,代码的工作方式,因为前面的单元测试通过了它。

在列表中的最后一项也被删除后,当命令运行两次时,我试图让InvalidOperationException通过时,问题正在发生。所以Add(5) -> Undo() -> Undo()来给出一个例子。还从valDict更改if语句。从Count> 0到Value> 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();
        }
    }

有没有人能以新鲜的眼光看待这个问题,指出一个可能的解决方案,但不是一个固定的实现,因为我需要自己修复实现。

重复使用时“撤消操作”失败

在获得Value: List之前可以控制List不为空。Count==0或!list.Any()。