代码合同运行时错误消息

时间:2013-12-19 10:35:08

标签: c# .net code-contracts

如何使用代码合同解决此问题:

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

错误:

  

合同调用的用户消息只能是字符串文字或静态   字段或至少在内部可见的静态属性。

修改: 当您使用具有类似用例的合同时,我看到了这些信息

2 个答案:

答案 0 :(得分:2)

除布尔条件外,所有的合约方法都有重载,除了布尔条件:

只要在运行时违反合同,就会显示用户提供的字符串。

必须是编译时常量

所以一定是:

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

答案 1 :(得分:2)

The documentation say that: (page 13)

  

2.10合约方法超载

     

所有合约方法都有带字符串的重载   除了布尔条件:

     

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

     

合同到时,将显示用户提供的字符串   在运行时违反。 目前,它必须是编译时常量

您的变量msg显然不是编译时常量 相反,这将起作用:

Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()), "Invalid code");