То, что “Сокращается, не может быть в блоке попытки”, среднем?

Я пользуюсь 3,5 библиотеками для контрактов кода Microsoft

public object RetrieveById(int Id)
{    
    //stuff happens...
    Contract.Ensures(newObject != null, "object must not be null");
    return newProject;
    //No error message if I move the Contract.Ensures to here
    //But it isn't asserting/throwing a contract exception here either           
}

Я получаю сообщение компилятора: "Раздел Error 18 Contract в блоке попытки в методе 'Контроллер. RetrieveById (Система. Int32)'

ОБНОВЛЕНИЕ:

Я понял это с Вашей справкой:

  • Переместитесь в вершину
  • Проверьте по контракту. Результат

    Контракт. Удостоверяется (Контракт. Результат ()! = пустой указатель, "объект не должен быть несуществующим");

6
задан MatthewMartin 21 May 2010 в 16:07
поделиться

3 ответа

Возможно, мне что-то не хватает, но я только что просмотрел документацию по этому поводу:

http://msdn.microsoft.com/en-us/library/dd412865.aspx

там написано:

Вызов этого метода должен быть в начало метода или свойства, перед любым другим кодом.

Поэтому просто оставьте вызов Ensures в начале метода, и у вас не должно возникнуть никаких проблем.

6
ответ дан 9 December 2019 в 22:30
поделиться

Это довольно просто: класс Contract сигнализирует о нарушениях контракта, генерируя исключение. Помещение его в блок попытки приводит к поражению цели, вы можете поймать исключение.

3
ответ дан 9 December 2019 в 22:30
поделиться

Вот аналогичное решение:

http://social.msdn.microsoft.com/Forums/en/codecontracts/thread/43f467f1-14b7-4e56-8030-50f842b7ba68

Ваше последнее изменение показывает, что у вас есть код. над заявлением Contract.Ensures . Contract.Ensures должен стоять перед любым другим кодом в вашем методе, поэтому:

public object RetrieveById(int Id)
{    
    //first line of method:
    Contract.Ensures(newObject != null, "object must not be null");

    //stuff happens...

    return newProject;        
}
2
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: