Usando Contract.ForAll em contratos de código

Ok, tenho mais uma pergunta sobre contratos de código. Eu tenho um contrato em um método de interface que se parece com isso (outros métodos omitidos para maior clareza):

[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;
    }
}

Eu tenho código consumindo a interface que se parece com isso:

    public void AddRequested(IUnboundTagGroup group)
    {
            foreach (IUnboundTagGroup subGroup in group.GetAllGroups())
            {
                AddRequested(subGroup);
            }
            //Other stuff omitted
    }

AddRequested requer um parâmetro de entrada não nulo (ele implementa uma interface que possui um contrato Requer) e, portanto, recebo um erro 'requer não comprovado: grupo! = nulo' no subGrupo que está sendo passado para oAddRequested. Estou usando a sintaxe ForAll corretamente? Se sim, e o solucionador simplesmente não está entendendo, existe outra maneira de ajudar o solucionador a reconhecer o contrato ou eu simplesmente preciso usar um Assume sempre que GetAllGroups () for chamado?

questionAnswers(1)

yourAnswerToTheQuestion