2013-12-19 4 views
2

Как я могу решить эту проблему с помощью кода контракта:Код контракт выполнение сообщений об ошибке

private string SomeMethod(string code) 
{ 
    var msg = "Invalid blabal " + code; 
    Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()), msg); 
} 

Ошибка:

User message to contract call can only be string literal, or a static field, or static property that is at least internally visible.

EDIT: Я видел эту информацию, как вы используете контракты с подобным использование

ответ

2

Все методы контракта имеют перегрузки, которые берут строку в дополнение к логическому состоянию:

Строка, предоставленная пользователем, будет отображаться всякий раз, когда контракт нарушается во время выполнения.

Должно быть постоянное время компиляции.

Так должно быть:

Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()), "YOUR MASSAGE"); 
2

The documentation say that: (page 13)

2.10 Overloads on Contract Methods

All of the contract methods have overloads that take a string in addition to the boolean condition:

Contract.Requires(x != null, "If x is null, then the missiles are red!");

The user-supplied string will be displayed whenever the contract is violated at runtime. Currently, it must be a compile-time constant.

Ваша переменная msg, очевидно, не является константой времени компиляции.
Таким образом, это будет работать:

Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()), "Invalid code"); 
Смежные вопросы