Что нужно, чтобы доказать этот Контракт. Требует?

У меня есть приложение, которое проходит раунды в турнире, и я получаю предупреждение о контракте по этой упрощенной структуре кода:

    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?

Другие вопросы по тегам