如何重置 _version 列表以防止 Spec Explorer 中的重复状态

How to reset _version list to prevent duplicate states in Spec Explorer

我创建了一个 Spec Explorer 项目,其中有一个列表作为系统变量。几乎在每条规则中,该列表都经过调整以获得正确的结果。但是当我探索我的项目时,我得到了重复的状态。如果我比较这些状态,我发现的唯一区别是:

_version: 25 System.Int32
_version: 23 System.Int32

在谷歌搜索为什么会发生这种情况后,我发现每次更改字符串时版本都会更改。因此,即使版本 23 和 25 包含相同的字符串,版本号也会让 Spec Explorer 认为它们不同,因此它会产生 2 个状态。有没有什么办法解决这一问题?比如重置字符串,或者可能有一种方法可以强制 Spec Explorer 接受它。

以下是可能根本原因的想法:

Set、Sequence 或 Map 等丰富的状态对象是不可变的。 这意味着,如果你想添加一个元素 "Add"-method returns 一个具有更改内容的新对象。 重要的是,这个返回的对象仍然被 Spec Explorer 检测为相同(但内容已更改)的实例。 所以你应该总是重用这个返回的对象。 您可以通过将已更改的对象分配回程序模型的静态变量来执行此操作:

_version = _version.Add(15);

如果在您的程序中,现在在每次使用 "new" 运算符调用您的规则方法时创建一个完整的新对象,并将此新对象复制到您的程序模型的静态变量中,您将始终获取一个新实例,Spec Explorer 会将它们检测为不同的实例,即使内容相同。

_newversion = new Set<int>();  
...  
_version = _newversion;

希望这对您的情况有所帮助...