bien, ya que estaba hurgando con la construcción de un empadronador costumbre, habían notado este comportamiento que se refiere al rendimiento Las maravillas de la palabra clave de rendimiento
Digamos que tiene algo como esto:
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;
}
}
}
¿Qué hace posible debajo del capó del compilador ejecutar el índice ++ y el resto del código en el ciclo while después de que técnicamente se recupera de la función?
Sí, vale, máquina de estados, eso es lo que leo. ¿Pero qué tipo de código genera y qué hace esa máquina de estado con él? Pseudo código sería muy apreciado. – dexter
@ Max Malygin: el artículo que he vinculado a http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx muestra el código que se genera. –
@Mark, genial, gracias, los revisaré. – dexter