如何证明这份合同需要什么?

时间:2009-08-04 21:43:01

标签: c# .net design-by-contract microsoft-contracts

我有一个应用程序贯穿锦标赛中的轮次,我收到了关于这个简化代码结构的合同警告:

    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>上证明这一点?这是静态分析器中的错误吗?我如何向微软提交错误报告?

2 个答案:

答案 0 :(得分:3)

这看起来很奇怪。不幸的是,我正在使用VS版本的VS2010代码合同,因此我无法自己运行cccheck来玩游戏。

你肯定需要索引而不只是使用foreach循环吗?

只是为了确定 - 您上面的简化示例是否会产生相同的错误?总是值得检查一下,简化并没有解决问题:)例如,您是否对stuff做了其他任何事情,合同检查员可能会使用这个来使stuff.Count的担保无效?

答案 1 :(得分:1)

我使用代码合同版本1.2.21023.14检查了这一点,并没有得到警告。我的猜测是,这是一个已被修复的错误。