Mit Contract.ForAll in Code-Verträgen
Okay, ich habe noch eine andere Frage zu Code Contracts. Ich habe einen Vertrag über eine Schnittstellenmethode, die so aussieht (andere Methoden wurden aus Gründen der Übersichtlichkeit weggelassen):
[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;
}
}
Ich habe Code verbraucht die Schnittstelle, die so aussieht:
public void AddRequested(IUnboundTagGroup group)
{
foreach (IUnboundTagGroup subGroup in group.GetAllGroups())
{
AddRequested(subGroup);
}
//Other stuff omitted
}
AddRequested
erfordert einen Nicht-Null-Eingabeparameter (es implementiert eine Schnittstelle mit einem Requires-Vertrag), und daher erhalte ich den Fehler 'erfordert unbewiesen: Gruppe! = Null' für die Untergruppe, die an @ übergeben wirAddRequested
. Verwende ich die ForAll-Syntax richtig? Wenn dies der Fall ist und der Löser den Vertrag einfach nicht versteht, gibt es eine andere Möglichkeit, dem Löser beim Erkennen des Vertrags zu helfen, oder muss ich einfach ein Assume verwenden, wenn GetAllGroups () aufgerufen wird?