CodeContract问题确保

时间:2011-07-31 11:41:56

标签: .net code-contracts

我收到了以下代码:

    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())

为什么?

1 个答案:

答案 0 :(得分:2)

我不知道String.Format()函数是否有任何契约,但它只能承诺result != null,一个空字符串是一个有效的结果。

我检查过:String.Format()只有确保结果!= null

您可以通过插入Assume()

来简单地修复它
Contract.Assume(!String.IsNullOrEmpty(text));
return text;

但我会认真考虑在这里将结果不是空的部分作为合同。这对来电者真的很重要吗?