Что нужно, чтобы доказать этот Контракт. Требует?
У меня есть приложение, которое проходит раунды в турнире, и я получаю предупреждение о контракте по этой упрощенной структуре кода:
public static void LoadState(IList<Object> stuff)
{
for(int i = 0; i < stuff.Count; i++)
{
// Contract.Assert(i < stuff.Count);
// Contract.Assume(i < stuff.Count);
Object thing = stuff[i];
Console.WriteLine(thing.ToString());
}
}
Предупреждение:
contracts: requires unproven: index < @this.Count
Что я делаю неправильно? Как я могу доказать это на IList<T>
? Это ошибка в статическом анализаторе? Как мне отправить отчет об ошибке в Microsoft?
2 ответа
Я проверил это с версией 1.2.21023.14 контрактов кода и не получил предупреждений. Я предполагаю, что это ошибка, которая с тех пор была исправлена.
Это выглядит странно. К сожалению, я использую Pro версию VS2010 с Code Contracts, поэтому я не могу запустить cccheck
сам поиграть.
Вам определенно нужен индекс, а не просто использование foreach
цикл?
Просто чтобы быть уверенным - ваш упрощенный пример выше выдает ту же ошибку? Всегда стоит проверять, что упрощение не устранило проблему:) Например, вы делаете что-нибудь еще для stuff
который контролер контрактов может использовать для аннулирования гарантии о stuff.Count
?