De acuerdo, tengo otra pregunta de Contratos de Código. Tengo un contrato en un método de interfaz que se parece a esto (otros métodos omitidos para mayor claridad):Usando Contract.ForAll in Code Contracts
[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 código de consumo de la interfaz que se parece a esto:
public void AddRequested(IUnboundTagGroup group)
{
foreach (IUnboundTagGroup subGroup in group.GetAllGroups())
{
AddRequested(subGroup);
}
//Other stuff omitted
}
AddRequested
no requiere una parámetro de entrada nulo (implementa una interfaz que tiene un contrato de Requiere) y así obtengo un error 'requiere no comprobado: grupo! = nulo' en el subgrupo que pasa al AddRequested
. ¿Estoy usando la sintaxis ForAll correctamente? Si es así y el solucionador simplemente no comprende, ¿hay alguna otra manera de ayudar al solucionador a reconocer el contrato o simplemente necesito usar un Asumir siempre que se llame a GetAllGroups()?
La última versión ha habilitado 'ForAll', es posible que desee intentarlo :) – porges