Il seguente codice non funziona nella pre condizione. Si tratta di un bug nei contratti di codice?Bug in iteratori con contratti di codice?
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;
}
}
Perché le richieste devono essere su MoveNext anziché sul contructor di IteratorImpl? –
@pn, questo è il modo in cui il team C# ha scelto di implementare gli iteratori. Qualsiasi codice che appare nel corpo di un iteratore finirà nel metodo MoveNext del codice generato. – JaredPar
La mia domanda è se si tratta di un bug nei contratti di codice o meno. Sembra che il redattore del contratto di codice non comprenda gli iteratori. –