Diciamo che hai scritto un enumeratore personalizzato per il codice qui sotto:In che modo Visual Studio valuta l'oggetto IEnumerable senza interferire con MoveNext di IEnumerator ?
public class School : IEnumerable<Student>
E poi nel codice client, avete fatto queste cose:
static void Main(string[] args)
{
var school = CreateSchoolWithStudents();
var query = from student in school
where student.Name.StartsWith("S")
select student;
Debugger.Break();
}
private static School CreateSchoolWithStudents()
{
return new School
{
new Student { Name = "Sathyaish" },
new Student { Name = "John" },
new Student { Name = "Carol" },
new Student { Name = "Peter" }
};
}
Quindi, impostare un break-point sul metodo MoveNext
implementazione della tua classe StudentEnumerator
.
Poi, quando si esegue il codice e le pause debugger dopo aver costruito la query/IEnumerable in questo caso, e si espande la Results View
come nella foto mostrato di seguito, come si fa di Visual Studio valutare la sequenza senza rompere nella sua enumeratore di MoveNext
?
Sono sempre stato curioso di questo.
Cercare FuncEval. Bella funzionalità con molti avvertimenti. Vedi http://blogs.msdn.com/b/jmstall/archive/2005/03/23/400794.aspx –
Impressionante. Si prega di aggiungere questo come risposta. Lo contrassegnerò come quello corretto. –