我收到以下包含代码合同的代码的警告。
public static int Min(IEnumerable<int> set)
{
Contract.Requires(set != null);
Contract.Requires(set.Any());
Contract.Ensures(Contract.ForAll(set, x => x >= Contract.Result<int>()));
int min = set.Min();
return min;
}
static void Main(string[] args)
{
Console.WriteLine(Min(new int[] {3,4,5}));
Console.WriteLine(Min(new int[] {})); // should fail
}
我收到以下警告:
Requires unproven: set.Any() on Min(new int[] {3,4,5})
Ensures unproven: Contract.ForAll(set, x => x > Contract.Result<int>())
两个问题:
我的后置条件声明 x >= Contract.Result(),但“确保未经证实”的警告声明 x > Contract.Result()。(Greather or equal vs. Greather)这怎么会发生?
为什么不能在上面的语句中证明 set.Any() ?
先感谢您。