Ok, jak mi grzebać w budowaniu własnego wyliczający, Zauważyłem ten problem, który dotyczy Wydajność Cuda słowa kluczowego yield
że masz coś takiego:
public class EnumeratorExample
{
public static IEnumerable<int> GetSource(int startPoint)
{
int[] values = new int[]{1,2,3,4,5,6,7};
Contract.Invariant(startPoint < values.Length);
bool keepSearching = true;
int index = startPoint;
while(keepSearching)
{
yield return values[index];
//The mind reels here
index ++
keepSearching = index < values.Length;
}
}
}
Co umożliwia pod maską kompilatora wykonanie indeksu ++ i reszty kodu w pętli while po technicznym wykonaniu zwrotu z funkcji?
Tak, ok, automat stanowy, to właśnie czytam. Ale jaki rodzaj kodu generuje i co robi ten automat państwowy? Pseudo kod byłby bardzo doceniany. – dexter
@Max Malygin: Artykuł, który podłączyłem do http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx pokazuje wygenerowany kod. –
@ Mark, cool, dzięki, będę sprawdzać te! – dexter