Uso de Contract.ForAll en contratos de código

Bien, tengo otra pregunta sobre los contratos de código. Tengo un contrato en un método de interfaz que se ve así (otros métodos se omiten para mayor claridad):

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

Tengo un código que consume la interfaz que se ve así:

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

AddRequested requiere un parámetro de entrada no nulo (implementa una interfaz que tiene un contrato Requiere) y así obtengo un error 'requiere no comprobado: grupo! = nulo' en el subgrupo que se pasaAddRequested. ¿Estoy usando la sintaxis ForAll correctamente? Si es así y el solucionador simplemente no está entendiendo, ¿hay otra forma de ayudar al solucionador a reconocer el contrato o simplemente necesito usar un Supuesto cada vez que se llama a GetAllGroups ()?

Respuestas a la pregunta(1)

Su respuesta a la pregunta