그래, 또 다른 코드 계약 질문이 있습니다.코드 계약에서 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;
}
}
I 코드 다음과 같다 인터페이스 소모가 :
public void AddRequested(IUnboundTagGroup group)
{
foreach (IUnboundTagGroup subGroup in group.GetAllGroups())
{
AddRequested(subGroup);
}
//Other stuff omitted
}
AddRequested
이 비를 요구 I는 (다른 방법이 명료 함을 위해 생략)이 보이는 인터페이스 방법에 대한 계약을 가지고 null 입력 매개 변수 (그것은 Requires 계약이있는 인터페이스를 구현합니다.) 따라서 서브 그룹에 AddRequested
으로 전달되는 'required unproven : group! = null'오류가 발생합니다. ForAll 구문을 올바르게 사용하고 있습니까? 그렇다면 솔버는 단순히 이해하지 못한다. 솔버가 계약을 인식하는 데 도움이되는 또 다른 방법이 있는가? 아니면 GetAllGroups()가 호출 될 때마다 Assume을 사용하기 만하면 되는가?
최신 버전은'ForAll'을 가능하게했고, 시도해 볼 수도있다. :) – porges