Почему я получаю следующее предупреждение для этого тривиального образца кода, как только уровень предупреждения находится на 2-м уровне или выше?
public int Foo(int a)
{
if (a >= 0) throw new ArgumentException("a should be negative", "a");
Contract.EndContractBlock();
return a;
}
CodeContracts: Предлагаемый требует: Это предварительное условие избыточно: Подумайте об этом. Вы сравниваете значение struct с null?
Ясно, что целое число может быть отрицательным, поэтому предварительное условие вряд ли избыточно, поэтому почему я получаю это предупреждение?
Изменить: вот что показывает 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;
}