2

静的チェッカーがこのメソッドですべて問題ないと言う理由がわかりません:

public static int GetNonNegativeValue()
{
    Contract.Ensures(Contract.Result<int>() >= 0);

    return -1;
}

静的チェックがオンになっています。

アップデート:

これも大丈夫です。

var i = Doer.GetNonNegativeValue();
Contract.Assert(i < 0);
4

2 に答える 2

2

静的チェッカーの設定で「推論が必要」をアクティブにすると、この警告が消えたように見えます。

推論Contract.Requires(false)( "CodeContracts:提案されたrequires:Contract.Requires(false);")よりも、このメソッドを「無効」にします。これは、コントラクトの例外を発生させずに呼び出すことができないためです。とにかくステートメントをEnsures実行しないため、コントラクトチェッカーはそのようなメソッドでを検証しないようです。return

ところで:「波線を表示」をアクティブまたは非アクティブにしても、この動作はまったく変わりません。私は、OPがテストしたときにこの設定を変更しただけではないと推測できます。

于 2013-01-24T10:22:16.280 に答える
1

次のチェック ボックスを再度オンにしてから、プロジェクトを再構築することをお勧めします。

プロジェクトを右クリック -> プロパティ -> コード コントラクト -> 波線を表示

また、ソリューションActive Config(または特定のプロジェクトの構成)がプロパティ ページの内容とBuild一致していることを確認してください。ConfigurationCode Contracts

于 2013-01-24T10:28:56.513 に答える