好的,我有另一个Code Contracts问题。我在接口方法上有一个约束条件,看起来像这样(为了清晰起见省略了其他方法):
[ContractClassFor(typeof(IUnboundTagGroup))]
public abstract class ContractForIUnboundTagGroup : IUnboundTagGroup
{
public IUnboundTagGroup[] GetAllGroups()
{
Contract.Ensures(Contract.Result<IUnboundTagGroup[]>() != null);
Contract.Ensures(Contract.ForAll(Contract.Result<IUnboundTagGroup[]>(), g => g != null));
return null;
}
}
我有一段使用如下接口的代码:
public void AddRequested(IUnboundTagGroup group)
{
foreach (IUnboundTagGroup subGroup in group.GetAllGroups())
{
AddRequested(subGroup);
}
//Other stuff omitted
}
< p >< code >AddRequested< /code >需要一个非空的输入参数(它实现了一个要求契约的接口),所以当我将subGroup传递到< code >AddRequested< /code >时,会出现“requires unproven:group!= null”的错误。我是否正确使用了ForAll语法?如果是这样,而求解器只是不能理解,是否有另一种方法帮助求解器识别契约,或者在调用GetAllGroups()时是否仅需要使用Assume?< /p >
ForAll
,你可能想试试 :) - porges