2010-02-14 63 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下載安裝程序。

相關問題