Ok, wie ich mit dem Aufbau einer benutzerdefinierten enumerator wurde Stochern, hatte ich dieses Verhalten bemerkt, dass die Ausbeute betrifftDie Wunder der Ausbeute Schlüsselwort
Sagen Sie so etwas wie dieses:
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;
}
}
}
Was macht es unter der Haube des Compilers möglich, den Index ++ und den Rest des Codes in der while-Schleife auszuführen, nachdem Sie technisch von der Funktion zurückgekehrt sind?
Ja, ok, Staatsmaschine, das habe ich gelesen. Aber was für einen Code erzeugt er und was macht die Zustandsmaschine damit? Pseudocode würde sehr geschätzt werden. – dexter
@Max Malygin: Der Artikel, den ich verlinkt habe, http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx zeigt den Code, der generiert wird. –
@Mark, cool, danke, ich werde die auschecken! – dexter