我有一个应用程序贯穿锦标赛中的轮次,我收到了关于这个简化代码结构的合同警告:
public static void LoadState(IList<Object> stuff)
{
for(int i = 0; i < stuff.Count; i++)
{
// Contract.Assert(i < stuff.Count);
// Contract.Assume(i < stuff.Count);
Object thing = stuff[i];
Console.WriteLine(thing.ToString());
}
}
警告是:
contracts: requires unproven: index < @this.Count
我做错了什么?如何在IList<T>
上证明这一点?这是静态分析器中的错误吗?我如何向微软提交错误报告?
答案 0 :(得分:3)
这看起来很奇怪。不幸的是,我正在使用VS版本的VS2010代码合同,因此我无法自己运行cccheck
来玩游戏。
你肯定需要索引而不只是使用foreach
循环吗?
只是为了确定 - 您上面的简化示例是否会产生相同的错误?总是值得检查一下,简化并没有解决问题:)例如,您是否对stuff
做了其他任何事情,合同检查员可能会使用这个来使stuff.Count
的担保无效?
答案 1 :(得分:1)
我使用代码合同版本1.2.21023.14检查了这一点,并没有得到警告。我的猜测是,这是一个已被修复的错误。