Contract.Requires和DateTime

时间:2011-05-22 14:15:54

标签: c# datetime code-contracts

我有以下方法:

private static void SampleMethod(DateTime dateTime1, DateTime dateTime2)
{
    Contract.Requires(dateTime1 > dateTime2);
    Console.WriteLine("date 1 > date 2");
}

SampleMethod(DateTime.Today, DateTime.Today.AddDays(1));

当我在启用静态检查的情况下构建它时,我收到警告CodeContracts: requires unproven: dateTime1 > dateTime2

请注意,动态检查对我来说很好,它只是静态检查我遇到了问题。

我如何证明这个断言,或者抑制警告?

编辑:

我正在阅读有关ContractVerificationAttribute的内容,如果我将[ContractVefirication(false)添加到方法中它没有任何区别(我怀疑这可能是一个错误),但将其添加到类中将正确关闭静态检查为全班同学。我仍在寻找一种方法来关闭那个静态检查。但需要。

1 个答案:

答案 0 :(得分:3)

静态验证器有其局限性,有时您必须提供帮助。它对数值数学的理解有限,但DateTime似乎超出了它的范围。

这就是Contract.Assume(bool)存在的原因:

    DateTime d1 = DateTime.Today;  
    DateTime d2 = d1.AddDays(-7);

    Contract.Assume(d1 > d2);

    SampleMethod(d1, d2);
  

CodeContracts:检查了4个断言:4个正确