我正在玩代码合同,并得到了一个简单的方法,在每个字符之间插入给定数量的空格字符。
例如
Hello -> H e l l o
World -> W o r l d
InsertSpaceBetweenLetters 方法在一个类中实现,该类提供一些字符串属性 S,即修改后应返回的字符串。这是代码
public string InsertSpaceBetweenLetters(int spaceWidth)
{
Contract.Requires(spaceWidth > 0);
Contract.Requires(S.Length > 0);
Contract.Ensures(Contract.Result<string>() != null);
Contract.Ensures(Contract.Result<string>().Length == S.Length + (S.Length - 1) * spaceWidth);
string result = String.Empty;
Contract.Assume(S.Length >= 0);
for(int i = 0; i < S.Length; i++)
{
result += S[i];
if (i < S.Length - 1)
result += new String(' ', spaceWidth);
}
return result;
}
静态检查器给我以下警告:
ensures unproven: Contract.Result<string>().Length == S.Length + (S.Length - 1) * spaceWidth
我想我可以通过在循环之前做的假设来摆脱这个警告:
Contract.Assume(S.Length >= 0);
但警告仍然存在。必须做出哪些假设才能消除警告?
先感谢您。