2012-05-22 100 views
1

我有這個簡單的代碼:代碼契約警告不顯示

public ArrayStack(int capacity) 
    { 
     Contract.Requires(capacity >= 0); 
     Contract.Ensures(_items != null); 
     Contract.Ensures(_items.Length == capacity); 
     _items = new T[capacity]; 
     _top = -1; 
    } 

我預計,一旦我鍵入followig我會得到一個編譯時警告,但我只能從合同運行時異常。

static void Main(string[] args) 
    { 
     int i = -1; 
     ArrayStack<string> stack = new ArrayStack<string>(i); 

    } 

有什麼想法嗎?

編輯:我的代碼合同設置畫面 enter image description here

+0

愚蠢的問題,但你實際運行驗證器? (你的設置是什麼等?) –

+0

@JonSkeet - 當然,我實際上標記了所有內容:)我正在進行運行時驗證。有什麼特別的我應該在環境中注意? –

+0

添加設置頁面圖片 –

回答

2

了它。

看來編譯器太聰明瞭,看到沒有人在最後一行之後使用堆棧,所以他沒有檢查它。

一次我加stack.push(...)它給我的錯誤...

不能有coputer太聰明......

1

如果你想有波浪線,那麼你必須檢查「顯示squigglies」:

enter image description here

重新構建該項目等待靜態分析完成,並且在'輸出'窗口中(如果您未運行'Ultimate'版本的VS,這些可能很容易錯過)以及可疑代碼下的行都會出現警告。

[編輯]順便說一下,我總是以'標準合同需求'組裝模式運行。

然後,例如生成後: enter image description here

並在IDE:

enter image description here