为什么在“警告级别”为2级或更高级别时,会对此琐碎的代码示例收到以下警告?

public int Foo(int a)
{
    if (a >= 0) throw new ArgumentException("a should be negative", "a");
    Contract.EndContractBlock();
    return a;
}



显然,整数可以为负,因此前提条件几乎不是多余的,那么为什么会收到此警告?

编辑:这是ILSpy在查看exe时显示的已创建函数的内容:
public int Foo(int a)
{
    if (a >= 0)
    {
        ContractHelper.RaiseContractFailedEvent(ContractFailureKind.Precondition, null, "a < 0", null);
        throw new ArgumentException("a should be negative", "a");
    }
    return a;
}

最佳答案

我知道这并不能直接回答您的问题,但是您似乎在使用旧版代码契约(Contract)。
本文档根据使用要求介绍了建议的组装模式:
http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf
从第20、21页...

该文档中的另一个代码段:

因此,使用“标准契约(Contract)要求”组装模式,您可以执行以下任一操作:

Contract.Requires<ArgumentException>(a < 0, "a");
// OR
Contract.Requires(a < 0, "a should be negative");
这些都不会对我产生任何警告。
希望这对您有所帮助。
干杯
彼得斯基

09-19 08:36