2010-02-14 50 views
6

我有以下代码:获取代码契约在Visual Studio中工作2010

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。

感谢

回答

2

我没有那个标签要么但我找到了一个解决办法:

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

可能必须安装代码的合同方案,但下载链接无法正常工作。 http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx

+0

如果对于i = 0,i = 10和i = -10的值,将引发错误。我不明白。 – 2010-02-14 23:35:12

+0

我刚刚试过用Contract.Requires (i> = 0);现在生活并不灰心。也许你必须按照Victor的说法给出异常类型。 – 2010-02-14 23:38:13

+0

嗯......你说得对。有些东西不太合适......即使合同的默认行为是抛出一个错误并显示一个窗口。 – 2010-02-14 23:38:29

0

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

更多信息请参见该user documentation(第6条) 。

+2

我曾经想过,但是我找不到它在项目的选项上的任何地方。 – 2010-02-14 23:11:25

5

您需要安装Visual Studio集成。尽管CodeContracts库本身是.NET 4的一部分,但代码需要由代码合同重写器(ccrewrite)重写以实际正确使用库。

DevLabs site下载安装程序。