Contract.Requires и DateTime - PullRequest
1 голос
/ 22 мая 2011

У меня есть следующий метод:

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

Обратите внимание, что динамическая проверка работает нормально для меня, это только статическая проверка, с которой у меня проблема.

Как мне доказать это утверждение или подавить предупреждение?

EDIT:

Я читал о ContractVerificationAttribute , если я добавлю [ContractVefirication(false) к методу, это не имеет значения (я подозреваю, что это может быть ошибкой), но добавление его в класс отключит статическую проверку правильно для всего класса. Я все еще ищу способ отключить статическую проверку для этого Требуется, хотя.

1 Ответ

3 голосов
/ 22 мая 2011

Статический верификатор имеет свои ограничения, иногда вам приходится помогать. Он имеет ограниченное понимание числовой математики, но DateTime, кажется, выходит за рамки его.

Вот почему Contract.Assume(bool) существует:

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

    Contract.Assume(d1 > d2);

    SampleMethod(d1, d2);

CodeContracts: проверено 4 утверждения: 4 правильных

...