El siguiente código falla en la condición previa. ¿Es esto un error en los contratos de código?Error en iteradores con contratos de código?
static class Program
{
static void Main()
{
foreach (var s in Test(3))
{
Console.WriteLine(s);
}
}
static IEnumerable<int>Test (int i)
{
Contract.Requires(i > 0);
for (int j = 0; j < i; j++)
yield return j;
}
}
¿Por qué debería estar el Requires on the MoveNext en lugar del contructor de IteratorImpl? –
@pn, así es como el equipo C# eligió implementar iteradores. Cualquier código que aparezca en el cuerpo de un iterador terminará en el método MoveNext del código generado. – JaredPar
Mi pregunta es si esto es un error en los contratos de código o no. Parece que el escritor de código de contrato re no entiende los iteradores. –