C# 让代码合同在VisualStudio2010中工作

C# 让代码合同在VisualStudio2010中工作,c#,code-contracts,C#,Code Contracts,我有以下代码: class Program { static void Main(string[] args) { Console.WriteLine(SqrtRoot(0)); Console.WriteLine(SqrtRoot(10)); Console.WriteLine(SqrtRoot(-10)); Console.ReadKey(); } public static int SqrtR

我有以下代码:

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()调用。我应该在尝试使用代码契约时设置一些东西吗

我正在使用VisualStudio2010RC


谢谢

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


有关更多信息,请参阅(第6节)。

我也没有该选项卡,但我找到了一个解决方法:

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

Contract.Requires

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


从下载安装程序。

我已经想到了这一点,但是我在项目选项的任何地方都找不到它。如果I=0、I=10和I=-10的值为0,则会引发错误。我不明白。我只是用Contract.Requires(I>=0)尝试了一下;现在,现场还没有变灰。也许你必须按照Victor的建议给出异常类型。嗯。。。你说得对。那里有些事情进展不顺利。。。尽管契约的默认行为是抛出一个错误并显示一个窗口,但我必须从他们的站点安装代码契约。现在,它在Contract.Requires()中按预期工作。