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);

    }

何か案は?

編集:私のコード契約設定の写真 ここに画像の説明を入力してください

4

2 に答える 2

2

理解した。

コンパイラは賢すぎて、最後の行の後にスタックを使用している人がいないことを確認しているため、チェックしていません。

stack.push(...)を追加すると、エラーが発生します...

あまりにも賢くするためにコンピューターを持つことはできません...

于 2012-05-22T12:03:44.403 に答える
1

波線が必要な場合は、「波線を表示」をチェックする必要があります。

ここに画像の説明を入力してください

プロジェクトを再構築し、静的分析が終了するのを待ちます。「出力」ウィンドウに警告(「Ultimate」バージョンのVSを実行していない場合、これらは見逃しやすい可能性があります)と行の両方が表示されます。疑わしいコードの下で。

[編集]ちなみに、私はいつも「標準契約が必要」の組み立てモードで実行しています。

次に、サンプルビルドの後: ここに画像の説明を入力してください

およびIDEの場合:

ここに画像の説明を入力してください

于 2012-05-22T11:56:52.020 に答える