Nehmen wir an, Sie haben einen benutzerdefinierten Enumerator für den folgenden Code geschrieben:
%Vor%Und dann im Client-Code haben Sie das getan:
%Vor% Setzen Sie dann einen Break-Point für die MoveNext
-Methodenimplementierung Ihrer StudentEnumerator
-Klasse.
Dann, wenn Sie den Code ausführen und der Debugger bricht nach dem Erstellen der Abfrage / IEnumerable in diesem Fall und erweitern Sie die Results View
wie in dem unten gezeigten Bild, wie bewertet Visual Studio die Sequenz ohne in die% des Enumerators zu brechen co_de%?
Ich war schon immer neugierig darauf.
Visual Studio verwendet eine Funktion namens FuncEval, mit der die IDE Ihren Code ausführen kann. Dies ermöglicht viele nette Features, aber natürlich gibt es zahlreiche Vorbehalte dies zu tun. Beispiele sind Nebeneffekte auf Eigenschaften, Deadlocks, das Überspringen von Schritten in einer Schleife und seltsame Debuggerfahrungen.
Dies liegt daran, dass der Debugger nur an Ihren laufenden Prozess und nicht an das Visual Studio selbst angeschlossen ist. Wenn Sie eine zweite Kopie von Visual Studio geöffnet haben, einen Debugger an die erste Kopie von Visual Studio angefügt haben, dann einen Haltepunkt innerhalb des Codes in der 2. Kopie gesetzt haben, dass der Haltepunkt bei der Auswertung der Liste in der ersten Kopie von Visual Studio ( und die erste Kopie von Visual Studio würde hängen bleiben, bis du auf der zweiten Kopie fortfährst).
BEARBEITEN: Danke an Brians Link , die Art und Weise, wie dies geschieht, erfolgt über FuncEval .
Tags und Links c# linq visual-studio enumerator ienumerator