我收到了以下代码:
protected virtual string FormatException(Exception exception, int intendation)
{
Contract.Requires(intendation >= 0);
Contract.Requires<ArgumentNullException>(exception != null);
Contract.Ensures(!String.IsNullOrEmpty(Contract.Result<string>()));
var msg = exception.ToString().Replace("\r\n", "\r\n".PadRight(intendation, '\t'));
string text = string.Format("\r\n******* EXCEPTION ********\r\n\t{0}", msg);
return text;
}
它给了我
警告19 CodeContracts:确保未经证实:!String.IsNullOrEmpty(Contract.Result())
为什么?
答案 0 :(得分:2)
我不知道String.Format()
函数是否有任何契约,但它只能承诺result != null
,一个空字符串是一个有效的结果。
我检查过:String.Format()只有确保结果!= null
您可以通过插入Assume()
:
Contract.Assume(!String.IsNullOrEmpty(text));
return text;
但我会认真考虑在这里将结果不是空的部分作为合同。这对来电者真的很重要吗?