Angenommen, Sie haben einen benutzerdefinierten Enumerator für den folgenden Code geschrieben:Wie evaluiert Visual Studio das IEnumerable ohne in seinen IEnumerator <T> MoveNext zu brechen?
public class School : IEnumerable<Student>
Und dann im Client-Code, haben Sie dies:
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" }
};
}
Dann eine Pause-Punkt auf der Methode MoveNext
eingestellt Implementierung Ihrer StudentEnumerator
Klasse.
Dann, wenn Sie den Code und die Debugger bricht nach Konstruktion der Abfrage/IEnumerable in diesem Fall laufen und Sie die Results View
wie im Bild unten erweitern, wie funktioniert Visual Studio bewerten die Sequenz ohne MoveNext
in seine enumerator bricht?
Ich war schon immer neugierig darauf. Diese
Nachschlagen FuncEval. Nettes Feature mit vielen Vorbehalten. Siehe http://blogs.msdn.com/b/jmstall/archive/2005/03/23/400794.aspx –
Ehrfürchtig. Bitte fügen Sie dies als Antwort hinzu. Ich werde es als das richtige markieren. –