好的,我還有另一個代碼合同問題。我有一個接口方法的合同,看起來像這樣(爲清楚起見省略其它方法):在代碼合同中使用Contract.ForAll
[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
}
AddRequested
需要非空輸入參數(它實現了一個接口有一個需求合同),所以我得到一個'需要未經證實:組!=空'錯誤的子組被傳遞到AddRequested
。我是否正確使用ForAll語法?如果是這樣,求解者根本不理解,還有另一種方法可以幫助求解器識別合同,或者每當調用GetAllGroups()時,我是否只需要使用Assume?
最新版本已啓用'ForAll',你可能想試試:) – porges 2010-07-09 21:56:44