2015-03-17 2 views
1

Я создал проект Spec Explorer, который имеет список как системную переменную. Почти во всех правилах этот список адаптирован для получения правильных результатов. Но когда я исследую свой проект, я получаю повторяющиеся состояния. Если сравнивать эти состояния с той лишь разницей я нахожу:Как сбросить список _version для предотвращения повторяющихся состояний в Spec Explorer

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

После прибегая к помощи, почему это происходит, я обнаружил, что каждый раз, когда строка изменяется изменения версии. Так что, хотя версии 23 и 25 содержат одну и ту же строку, номер версии заставляет Spec Explorer думать, что они разные, поэтому он создает 2 состояния. В любом случае, чтобы исправить это? Как сброс строки или, возможно, есть способ заставить Spec Explorer принять это.

ответ

0

Вот идея для возможной причины:

Богатые государственные объекты, такие как Set, последовательности или карты неизменны. Это означает, что если вы хотите добавить элемент, метод «Добавить» возвращает новый объект с измененным содержимым. Важно то, что этот возвращенный объект по-прежнему обнаружен как один и тот же экземпляр (но измененный контент) в Spec Explorer. Поэтому вы должны всегда повторно использовать этот возвращенный объект. Вы можете сделать это путем присвоения измененного объекта обратно к статическому переменной состояния вы программируете модели:

_version = _version.Add(15); 

Если в вашей программе вместо совершенно новый объект сейчас создается при каждом вызове вашего метода правила с " новый "-оператор, и этот новый объект копируется в переменную статического состояния вашей программной модели, вы всегда будете иметь новый экземпляр, а Spec Explorer будет обнаруживать их как разные экземпляры, даже если контент один и тот же.

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

Надеется, что это помогает в вашем случае ...

+0

Первого спасибо за ответ, я не думаю, что вы получите точную проблему. _version - это не имя списка, это версия моего списка, мой список называется «enabled». Список версий 23 и 25 точно такой же, за исключением номера версии. Этот номер версии - это то, что я не могу редактировать. Каждый раз, когда я включаю .Add («что-то») или включена. Очистить() внутренне визуальная студия изменяет номер версии, а Spec Explorer видит 2 разных состояния, хотя они на самом деле одинаковы. Функция Add возвращает void, поэтому предлагаемое решение не будет работать. – Kyra

+0

@ Kyra: В моем тесте выше я мог воспроизвести вашу проблему. Так что-то вы делаете что-то другое. Какую коллекцию вы используете (вы упоминаете «список», который не является частью Microsoft.Modeling)? Microsoft.Modeling.Set действительно возвращает Set, а не void (см. Https://msdn.microsoft.com/en-us/library/ee680676.aspx). Или вы используете контейнер, такой как Microsoft.Modelling.SetContainer? Попробуйте использовать один из них ... – goofy

+0

@Kyra: Если «_version» не является частью вашего пространства состояний, я понятия не имею, откуда оно взялось. Мое единственное предположение, что это может быть внутреннее состояние реализации «списка», которое вы используете, которое обычно совершенно невидимо для пользователя ... – goofy

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

  • Нет связанных вопросов^_^