わかりました、コード コントラクトに関する別の質問があります。私は次のようなインターフェイス メソッドのコントラクトを持っています (明確にするために他のメソッドは省略されています)。
[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
null 以外の入力パラメーターが必要なため (Requires コントラクトを持つインターフェイスを実装する)、渡される subGroup で「requires unproven: group != null」エラーが発生しますAddRequested
。ForAll 構文を正しく使用していますか? そうであり、ソルバーが単に理解していない場合、ソルバーがコントラクトを認識できるようにする別の方法はありますか、または GetAllGroups() が呼び出されるたびに Assume を使用する必要がありますか?