6

我有以下代码:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(SqrtRoot(0));
        Console.WriteLine(SqrtRoot(10));
        Console.WriteLine(SqrtRoot(-10));
        Console.ReadKey();
    }

    public static int SqrtRoot(int i)
    {
        Contract.Requires(i >= 0);
        return (int)Math.Sqrt(i);
    }
}

我在调试模式下运行它,它应该在最后一行引发某种错误

Console.WriteLine(SqrtRoot(-10));

尽管如此,由于某种原因,它没有。它似乎忽略了 Contract.Requires() 调用。在尝试使用代码合同时我应该设置一些东西吗?

我正在使用 Visual Studio 2010 RC。

谢谢

4

3 回答 3

5

您需要安装 Visual Studio 集成。虽然 CodeContracts 库本身是 .NET 4 的一部分,但您的代码需要由 Code Contracts 重写器 ( ccrewrite) 重写才能正确使用该库。

DevLabs 站点下载安装程序。

于 2010-03-04T01:51:10.007 回答
2

我也没有那个标签,但我找到了一个解决方法:

Contract.Requires<ArgumentOutOfRangeException>(i >= 0);

可能必须安装代码合同包,但下载链接不起作用。http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx

于 2010-02-14T23:31:09.650 回答
0

我认为您必须在项目设置中启用运行时合同检查(应该有一个“代码合同”窗格......)

有关详细信息,请参阅用户文档(第 6 节)。

于 2010-02-14T23:06:01.530 回答