如何使用代码合同解决此问题:
private string SomeMethod(string code)
{
var msg = "Invalid blabal " + code;
Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()), msg);
}
错误:
合同调用的用户消息只能是字符串文字或静态 字段或至少在内部可见的静态属性。
修改: 当您使用具有类似用例的合同时,我看到了这些信息
答案 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");